Java-並查集實現
阿新 • • 發佈:2021-01-12
private static class UnionFind{
private int[] parent;
private int[] rank;
private int count;
public UnionFind(int n){
this.count = n;
parent = new int[n];
for(int i = 0; i < n; i++){
parent[i] = i;
}
rank = new int[n];
Arrays.fill(rank, 1);
}
// 節點數目
public int size() {
return parent.length;
}
// 兩點是否在同一集合
public boolean isConnected( int x , int y){
return find(x) == find(x);
}
//集合數目
public int count() {
return count;
}
// 路徑壓縮
public int find(int x){
return parent[x] == x ? x: (parent[x] = find(parent[x]));
}
// 按秩合併
public void unionSet(int x, int y){
int fx = find(x), fy = find(y);
if (fx == fy) {
return;
}
if(rank[x] < rank[y]){
int temp = fx;
fx = fy;
fy= temp;
}
rank[fx] += rank[fy];
parent[fy] = fx;
count--;
return ;
}
}