前言
###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.引爆最多的炸弹
题目链接: 2101. 引爆最多的炸弹 - 力扣(LeetCode)
题面:
**分析:**本质上还是求单向最大连通图,只不过连通的条件改成了能不能引爆 ,贴上灵神代码
代码:
java
class Solution {
public int maximumDetonation(int[][] bombs) {
int n = bombs.length;
List<Integer>[] g = new ArrayList[n];
Arrays.setAll(g, i -> new ArrayList<>());
for (int i = 0; i < n; i++) {
long x = bombs[i][0];
long y = bombs[i][1];
long r = bombs[i][2];
for (int j = 0; j < n; j++) {
long dx = x - bombs[j][0];
long dy = y - bombs[j][1];
if (j != i && dx * dx + dy * dy <= r * r) {
g[i].add(j); // i 可以引爆 j
}
}
}
int ans = 0;
boolean[] vis = new boolean[n];
for (int i = 0; i < n && ans < n; i++) {
Arrays.fill(vis, false);
ans = Math.max(ans, dfs(g, vis, i));
}
return ans;
}
private int dfs(List<Integer>[] g, boolean[] vis, int x) {
vis[x] = true;
int cnt = 1;
for (int y : g[x]) {
if (!vis[y]) {
cnt += dfs(g, vis, y);
}
}
return cnt;
}
}
后言
上面是力扣图论专题,下一篇是其他的习题,希望有所帮助,一同进步,共勉!