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;
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.