1. 程式人生 > >ALGORITHM1.5 Union-find implementation(p221)

ALGORITHM1.5 Union-find implementation(p221)

-- 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) { int
N = 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)