标签:lock http amp set init ref 抽象 connect 问题
并查集讲解
class Solution {
private:
const static int maxn = 200 + 5;
int fa[maxn], depth[maxn];
/**
* 初始化根节点数组,深度数组
*/
void init(){
for(int i = 0; i < maxn; i++){
fa[i] = i;
depth[i] = 1;
}
}
/**
* 找到某个节点的根节点(他属于哪一组?)
*/
int find(int x){
return (x == fa[x]) ? fa[x] : (fa[x] = find(fa[x]));
}
/**
* 合并两个分组
*/
void merge(int a, int b){
int x = find(a), y = find(b);
if(depth[x] > depth[y])fa[y] = x;
if(depth[y] > depth[x])fa[x] = y;
if(depth[x] == depth[y] && x != y){
fa[x] = y;
depth[y] ++;
}
}
public:
int findCircleNum(vector<vector<int>>& isConnected) {
init();
int n = isConnected.size();
for(int i = 0; i < n; i++){
for(int j = i + 1; j < n; j++){
if(i != j && isConnected[i][j]){
merge(i, j);
}
}
}
set<int>ans;
for(int i = 0; i < n; i++)ans.insert(find(i));//set去一下重,查一下有多少个不同的分组就是多少个省了
return ans.size();
}
};
标签:lock http amp set init ref 抽象 connect 问题
原文地址:https://www.cnblogs.com/peichaoL/p/14244967.html