0
点赞
收藏
分享

微信扫一扫

lc-2101

小黑Neo 2024-07-24 阅读 42

public int maximumDetonation(int[][] bombs) {
        int n = bombs.length;
        List<Integer>[] G = new List[n];
        for (int i = 0; i < n; i++) {
            G[i] = new ArrayList<>();
        }
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                long dist = ((long)bombs[i][0] - bombs[j][0]) * (bombs[i][0] - bombs[j][0]) + (bombs[i][1] - bombs[j][1]) * (bombs[i][1] - bombs[j][1]);
                if ((long)bombs[i][2] * bombs[i][2] >= dist) {
                    G[i].add(j);
                }
                if ((long)bombs[j][2] * bombs[j][2] >= dist) {
                    G[j].add(i);
                }
            }
        }
        int ans = 0;

        for (int i = 0; i < n; i++) {
            ans = Math.max(ans, bfs(G, i));
        }

        return ans;
    }

    private int bfs(List<Integer>[] G, int start) {
        int n = G.length;
        boolean[] marked = new boolean[n];
        int ans = 0;
        Queue<Integer> q = new LinkedList<>();
        q.add(start);
        marked[start] = true;
        while (!q.isEmpty()) {
            int size = q.size();
            for (int i = 0; i < size; i++) {
                int v = q.poll();
                ans++;
                for (int w : G[v]) {
                    if (!marked[w]) {
                        marked[w] = true;
                        q.add(w);
                    }
                }
            }

        }
        return ans;
    }

举报

相关推荐

0 条评论