实现优化(路径压缩)
public class QuickUnionUF{
private int[] roots;
//构造函数(各自为营)
public QuickUnionUF(int N){
roots=new int[N];
for(int i=0;i<N;i++){
roots[i]=i; //初始化roots数组
}
}
//寻根节点函数
private int findRoot(int i){
int root=i;
while(root!=roots[root])
root=roots[root]; //不是根节点时一层一层向根循环,找到根节点跳出循环
while(i!=roots[i]){
int temp=roots[i];
roots[i]=i;
i=temp; //从i开始到i的根节点root循环一次,记录经过的所有节点,并连接到root上,实现优化
}
return root;
}
//判断p和q是否在同一个集里(root相同)
public boolean connected(int p,int q){
return findRoot(p)==findRoot(q);
}
//把p和q的连接到同一个集合里
public void union(int p,int q){
int qroot=findRoot(q);
int proot=findRoot(p);
roots[proot]=qroot;
}
}