并查集是什么
并查集可以高效的进行下面的两个操作
- 查询元素a和元素b是否属于同一组
- 合并元素a和元素b所在的组
代码实现
public class UnionFindSet {
int [] par; //表示当前下标是父亲是谁,如per[3] = 1, 3的父亲是1。
int [] rank; //表示当前的树的高度
//查询树的根
public static int find(int x, int [] par){
if(par[x] == x){
return x;
}else{
//压缩路径,第二次查询可以直接返回x的根而不用递归
return par[x] = find(par[x], par);
}
}
//合并
public static void unite(int x, int y, int [] par, int [] rank){
x = find(x, par);
y = find(y, par);
if(x == y){
return ;
}
if(rank[x] < rank[y]){
par[x] = y;
}else{
par[y] = x;
if(rank[x] == rank[y]) rank[x]++;
}
}
//判断x和y是否属于同一个集合
public static boolean same(int x, int y, int [] par){
return find(x, par) == find(y, par);
}
}
并查集算法详解
本文深入解析了并查集算法,一种高效的数据结构,用于处理元素间的连接性和合并操作。并查集通过查询元素是否属于同一组及合并不同组来简化集合操作,文章提供了详细的代码实现,包括查询树根、合并及判断元素是否同属一个集合的功能。
1327

被折叠的 条评论
为什么被折叠?



