DFS
class Solution {
public:
int num=0;
vector<vector<int>> adj;
void dfs(int now,vector<int>& visit)
{
visit[now]=1;
num++;
for(auto x:adj[now])
{
if(!visit[x]) dfs(x,visit);
}
}
int maximumDetonation(vector<vector<int>>& bombs) {
int res=1;
int n=bombs.size();
adj.resize(n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i!=j)
{
long long x1=bombs[i][0],y1=bombs[i][1],r1=bombs[i][2];
long long x2=bombs[j][0],y2=bombs[j][1],r2=bombs[j][2];
long long d=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
if(d<=r1*r1) adj[i].push_back(j);
if(d<=r2*r2) adj[j].push_back(i);
}
}
}
for(int i=0;i<n;i++)
{
vector<int> visit(n);
num=0;
dfs(i,visit);
res=max(res,num);
}
return res;
}
};
BFS
class Solution {
public:
int maximumDetonation(vector<vector<int>>& bombs) {
int res=1,num=0;
int n=bombs.size();
vector<vector<int>> adj(n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i!=j)
{
long long x1=bombs[i][0],y1=bombs[i][1],r1=bombs[i][2];
long long x2=bombs[j][0],y2=bombs[j][1],r2=bombs[j][2];
long long d=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
if(d<=r1*r1) adj[i].push_back(j);
if(d<=r2*r2) adj[j].push_back(i);
}
}
}
for(int i=0;i<n;i++)
{
vector<int> visit(n);
num=1;
queue<int> q; q.push(i);
visit[i]=1;
while(!q.empty())
{
int now=q.front(); q.pop();
for(auto x:adj[now])
{
if(!visit[x])
{
visit[x]=1;
num++;
q.push(x);
}
}
}
res=max(res,num);
}
return res;
}
};