2101. 引爆最多的炸弹
思路:构建邻接表,求出每个炸弹i可以直接引爆的其他炸弹j。构建完邻接表后,使用深度优先搜索dfs来遍历每一个点,更新最大的值即可。
class Solution {
public:
typedef long long LL;
vector<int> g[110];
bool sta[110];
int dfs(int u){
if(sta[u]) return 0;
sta[u]=1;
int sum=1;
for(int i=0;i<g[u].size();i++){
int tmp=g[u][i];
sum+=dfs(tmp);
}
return sum;
}
int maximumDetonation(vector<vector<int>>& bombs) {
int n=bombs.size();
// 构建邻接表
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j) continue;
LL dis=(LL)(bombs[i][0]-bombs[j][0])*(bombs[i][0]-bombs[j][0])+(LL)(bombs[i][1]-bombs[j][1])*(bombs[i][1]-bombs[j][1]);
if(dis<=(LL)bombs[i][2]*bombs[i][2]){
g[i].push_back(j);
}
}
}
int mx=0;
//深度优先搜索dfs来遍历每一个点
for(int i=0;i<n;i++){
memset(sta,0,sizeof sta);
int tmp=dfs(i);
mx=max(mx,tmp);
}
return mx;
}
};