0
点赞
收藏
分享

微信扫一扫

leetcode 547. 朋友圈 dfs | 并查集

覃榜言 2023-02-22 阅读 24


dfs
每次拿到一个没有访问的节点
就dfs一遍把它和它的朋友都标记了
最后看看dfs了几次就有几个朋友圈

class Solution {
public:
vector<bool>visit;
int findCircleNum(vector<vector<int>>& M) {
if(M.size()==0){
return 0;
}
visit = vector<bool>(M.size(),false);
int ret = 0;
for(int i=0;i<M.size();i++){
if(!visit[i]){
dfs(i,M);
ret++;
}
}
return ret;
}

bool dfs(int i,vector<vector<int>>& M){
visit[i] = true;
for(int j=0;j<M[i].size();j++){
if(M[i][j]==1 && visit[j] == false){
dfs(j,M);
}
}
return true;
}
};

leetcode 547. 朋友圈 dfs | 并查集_并查集

并查集

class US{
public:
vector<int> parent;

US(int n){

parent = vector<int> (n,0);
for(int i=0;i<n;i++){
parent[i] = i;
}
}

int findP(int n){

while( parent[n] !=n ){
n = parent[n];
}
return n;
}

bool unionxy(int x,int y){

int yp = findP(y);
int xp = findP(x);
parent[yp] = xp;
return true;
}
};

class Solution {
public:
vector<bool>visit;
int findCircleNum(vector<vector<int>>& M) {
US u(M.size());
for(int i=0;i<M.size();i++){
for(int j=0;j<M[i].size();j++){
if(M[i][j]==1){
u.unionxy(i,j);
}
}
}
int ret = 0;
for(int i=0;i<M.size();i++){
if(u.parent[i] == i){
ret++;
}
}
return ret;
}
};

leetcode 547. 朋友圈 dfs | 并查集_i++_02


举报

相关推荐

0 条评论