Develop classes QuickUnionUF.java and QuickFindUF.java that implement quick-union and quick-find, respectively.
在这题里面,遇到了代码一直不结束的情况,后发现是Windows系统的eclipse默认采用ctrl + z
作为输入结束符。
另一个问题就是eclipse 的文件导入,可以才用重定向操作,但是没有成功,最终是在common里面选择Input file将测试用例导入解决的。
代码如下:
package chapter_one;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class Ex1_5_6_QuickFindUF {
private int[] id;
private int count;
public Ex1_5_6_QuickFindUF(int N){
id = new int[N];
count = N;
for(int i = 0; i < id.length; i++){
id[i] = i;
}
}
public int count(){
return count;
}
public int find(int a){
return id[a];
}
public boolean connected(int a, int b){
return find(a) == find(b);
}
public void union(int a, int b){
int aID = find(a);
int bID = find(b);
if(aID == bID) return;
for(int i = 0; i < id.length; i++){
if(id[i] == aID) id[i] = bID;
}
count--;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int N = StdIn.readInt();
Ex1_5_6_QuickFindUF quickFindUF = new Ex1_5_6_QuickFindUF(N);
while(!StdIn.isEmpty()){
int a = StdIn.readInt();
int b = StdIn.readInt();
if(quickFindUF.connected(a, b)) continue;
quickFindUF.union(a, b);
StdOut.println(a + " " + b);
}
StdOut.println(quickFindUF.count() + " components");
}
}
package chapter_one;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class Ex1_5_6_QuickUnion {
private int[] id;
private int count;
public Ex1_5_6_QuickUnion(int N){
id = new int[N];
count = N;
for(int i = 0; i < id.length; i++){
id[i] = i;
}
}
public int count(){
return count;
}
public int find(int a){
while(id[a] != a) a = id[a];
return a;
}
public boolean connected(int a, int b){
return find(a) == find(b);
}
public void union(int a, int b){
int aID = find(a);
int bID = find(b);
if(aID == bID) return;
id[aID] = bID;
count--;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int N = StdIn.readInt();
Ex1_5_6_QuickUnion qU = new Ex1_5_6_QuickUnion(N);
while(!StdIn.isEmpty()){
int a = StdIn.readInt();
int b = StdIn.readInt();
if(qU.connected(a, b)) continue;
qU.union(a, b);
StdOut.println(a + " " + b);
}
StdOut.println(qU.count() + " components");
}
}