并查集支持两种操作:
1、合并:将两个集合合并。2、查找
并查集的本质是一个数组,比如说我们创建一个int型的数组
int por[Max]
对于i来说,por[i]表示的就是这个数的上级,然而它的上级也在这个数组里。比如说por[4]=6,说明数字4的上级为数字6(
每一个集合里只有一个绝对上级,绝对上级的表现方式就是他的上级就是他本身,比如说:por[8]=8,然后这个绝对上级在并查集里叫做 根结点)。
并查集的基本操作
1、初始化
void InitU(int U[])
{
for(int i=0;i<Max;i++)
{
U[i]=i;
}
}
2、查找
查找的实质就是给定你一个I,然后让你找到属于他的根结点,一般情况下用递推直接实现
int RootU(int U[],int i)
{
while ( i != U[i])
{
i = U[i];
}
return i ;
}
3、合并
①对于元素之间的合并,要看其是否同归于一个根结点。
②对于集合之间的合并,只需要将一个集合的根结点的上级直接等于另一个集合的根结点即可。
void Union(int a,int b)
{
int A=RootU(a);
int B=RootU(b);
if(A!=B)
{
U[A]=B;
}
}