题解 | #城市群数量#并查集 C++

城市群数量

https://www.nowcoder.com/practice/71cde4dee669475f94d8d38832374ada

//并查集
class UnionFind{
    public:
        vector<int> parent;//记录父节点
        int cnt;//连通分量
        UnionFind(int n){
            this->cnt = n;
            this->parent.resize(n);
            for(int i=0;i<n;++i){
                parent[i] = i;//初始父节点指向自己
            }

        }
        //找到x的根节点
        int Find(int x){
            while(parent[x]!=x){
                x = parent[x];
            }
            return x;
        }
        //连接p和q
        void Union(int p,int q){
            int rootp = Find(p);
            int rootq = Find(q);
            if(rootp==rootq)
                return ;
            parent[rootp] = rootq;
            cnt--;
        }
        //返回连通分量
        int Connect(){
            return cnt;
        }

};

class Solution {
public:
    int citys(vector<vector<int> >& m) {
        // write code here
        int n = m.size();
        if(n==1)
            return 1;
        UnionFind uf(n);
        //遍历邻接矩阵
        for(int i=0;i<n;++i){
            for(int j=0;j<n;++j){
                if(i==j)
                    continue;
                if(m[i][j]==1)
                    uf.Union(i, j);
            }
        }

        return uf.Connect();
    }
};

全部评论

相关推荐

ResourceUtilization:算法很难了,现在都需要相关论文还有对应的实习,可以先试试中厂
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务