2013-02-21 131 views
4

我是新来的java,我有一个加权联盟查找算法。当我在一个剪贴簿页面上的eclipse中运行这个代码时,它会一直评估。加权联盟查找算法

Java代码

public class weightedUF { 
    private int[] id; 
    private int[] sz; 

    public weightedUF(int N) { 
     id = new int[N]; 
     sz = new int[N]; 
     for (int i = 0; i < N; i++) { 
      id[i] = i; 
     } 
     for (int i = 0; i < N; i++) { 
      sz[i] = 1; 
     } 
    } 

    private int root(int i) { 
     while (i != id[i]) { 
      i = id[i]; 
     } 
     return i; 
    } 

    public boolean connected(int p, int q) { 
     return root(p) == root(q); 
    } 

    public void union(int p, int q) { 
     int i = root(p); 
     int j = root(q); 
     if (sz[i] < sz[j]) { 
      id[i] = j; 
      sz[j] += sz[i]; 
     } 
     else { 
      id[j] = i; 
      sz[i] += sz[j]; 
     } 
     id[i] = j; 
    } 
} 

剪贴簿测试代码

weightedUF union = new weightedUF(10); 
union.union(9, 2); 
union.union(5, 2); 
union.union(1, 8); 
union.union(5, 7); 
union.union(4, 3); 
union.union(0, 7); 
union.union(1, 3); 
union.union(2, 4); 
union.union(8, 6); 
union 

回答

4

我想你应该删除你的最后一行:

id[i] = j; 

它破坏你的ID阵列。