1. 程式人生 > 其它 >Java-並查集實現

Java-並查集實現

技術標籤:Javajava

 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 ; } }