并查集

作者: const_qiu | 来源:发表于2020-09-18 17:10 被阅读0次
    //C/C++
    class UnionFind {
    public:
        UnionFind(vector<vector<char>>& grid) {
            count = 0;
            int m = grid.size();
            int n = grid[0].size();
            for (int i = 0; i < m; ++i) {
                for (int j = 0; j < n; ++j) {
                    if (grid[i][j] == '1') {
                        parent.push_back(i * n + j);
                        ++count;
                    }
                    else {
                        parent.push_back(-1);
                    }
                    rank.push_back(0);
                }
            }
        }
    
    //递归
        int find(int i) {
            if (parent[i] != i) {
                parent[i] = find(parent[i]);
            }
            return parent[i];
        }
    
    
        void unite(int x, int y) {
            int rootx = find(x);
            int rooty = find(y);
            if (rootx != rooty) {
                if (rank[rootx] < rank[rooty]) {
                    swap(rootx, rooty);
                }
                parent[rooty] = rootx;
                if (rank[rootx] == rank[rooty]) rank[rootx] += 1;
                --count;
            }
        }
    
    
        int getCount() const {
            return count;
        }
    
    
    private:
        vector<int> parent;
        vector<int> rank;
        int count;
    };
    

    1.朋友圈数量

    相关文章

      网友评论

          本文标题:并查集

          本文链接:https://www.haomeiwen.com/subject/advjyktx.html