当前位置:网站首页>leetcode 547.省份数量 并查集

leetcode 547.省份数量 并查集

2022-08-10 19:06:00 Alkali!

题目描述

省份数量
在这里插入图片描述


思路

直接利用并查集的思想即可。
并查集


代码

class Solution {
    
public:
    int findCircleNum(vector<vector<int>>& isConnected) {
    
        vector<int> p(210);
        for(int i=0;i<isConnected.size();i++)
            p[i]=i;  //初始化并查集的数组,每个元素的根节点都为自身,也即没有父结点、根节点,都是独立的

        for(int i=0;i<isConnected.size();i++)
            for(int j=0;j<isConnected[0].size();j++)
            {
    
                if(isConnected[i][j]==1)
                {
    
                    int a=find(i,p);
                    int b=find(j,p);
                    if(a!=b)  //如果不是一个集合
                        p[b]=a; //路径压缩合并
                }
            }
     //怎么计算一共有多少个集合?
        int res=0;
        for(int i=0;i<isConnected.size();i++)
            if(p[i]==i) res++;  //只要数一共有多少节点被作为根节点即可,根节点与集合个数一一对应
        return res;        
    }
    //路径压缩去查找的同时压缩路径
    int find(int x,vector<int>& p)
    {
    
        if(x!=p[x]) p[x]=find(p[x],p);
        return p[x];
    }
};

原网站

版权声明
本文为[Alkali!]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_45798993/article/details/126271552