1、问题
2、算法标签
- 并查集
3、通过代码
并查集算法实现代码
class Solution {
public:
int fara[205];
int flag[205];
void init(int n){
for(int i=0;i<n;i++){
fara[i]=i;
flag[i]=0;
}
}
int findfar(int far,int son){
if(fara[far]==far){
fara[son]=far;
return far;
}
return findfar(fara[far],far);
}
int output(int pronum){
int ans=0;
for(int i=0;i<pronum;i++){
int fa=findfar(fara[i],i);
if(!flag[fa]){
ans++;
flag[fa]=1;
}
}
return ans;
}
int findCircleNum(vector<vector<int>>& isConnected) {
int pronum=isConnected.size();
init(pronum);
for(int i=0;i<pronum;i++){
for(int j=0;j<i;j++){
if(isConnected[i][j]){
int asfar=findfar(fara[i],i);
int bsfar=findfar(fara[j],j);
fara[bsfar]=asfar;
}
}
}
return output(pronum);
}
};