二維網格非零值視為細胞,相鄰 (上下左右) 同值歸為一組,求連通分量數。
class UnionFind {
vector parent, rank;
UnionFind(int n): parent(n), rank(n,0) { iota(parent.begin(), parent.end(), 0); }
int find(int x) { return parent[x]==x?x:parent[x]=find(parent[x]); }
void unite(int x, int y) {
x=find(x); y=find(y); if(x==y) return;
if(rank[x]>& grid) {
int rows=grid.size(), cols=grid[0].size();
UnionFind uf(rows*cols);
for(int r=0;r roots;
for(int r=0;r
Coursera Introduction to Algorithms 第一周 Union-Find 講解。