ALGORITHM1.5 Union-find implementation(p221)
阿新 • • 發佈:2018-05-24
-- AR int find implement 關於 new pre con
//我在drjava裏無法運行,所以沒辦法只能到終端裏運行
//沒有tinyUF.txt的請看我關於algs4環境配置的那片文章(裏面有整本書測試數據的下載)
import edu.princeton.cs.algs4.*; public class UF { private int[] id; private int count; public UF(int N) { count = N; id = new int[N]; for(int i = 0; i < N; i++) { id[i]= i; } } public int count() { return count; } public boolean connected(int p, int q) { return find(p) == find(q); } //我用了p222的quick-find public int find(int p) { return id[p]; } public void union(int p, int q) {int pID = find(p); int qID = find(q); if(pID == qID) return; for(int i = 0; i < id.length; i++) { if(id[i] == pID) id[i] = qID; } count--; } public static void main(String[] args) { intN = StdIn.readInt(); UF uf = new UF(N); while(!StdIn.isEmpty()) { int p = StdIn.readInt(); int q = StdIn.readInt(); if(uf.connected(p,q)) continue; uf.union(p,q); StdOut.println(p + " " + q); } StdOut.println(uf.count() + " components"); } }
ALGORITHM1.5 Union-find implementation(p221)