1.初始化,一开始全部初始化为-1,表示自己为一个集合
void Initial(int S[])
{
for(int i=0;i<SIZE;i++){
S[i]=-1;
}
}
2.查
1)查找x的根结点
int Find(int S[], int x)
{
while (x>=0) {
x=S[x];
}
return x;
}
2)优化
int Find_better(int S[], int x)
{
int root=x;
while (root>=0) {
root=S[root];
}
while (x!=root) {
int t=S[x];
S[x]=root;
x=t;
}
return root;
}
3.并
1)两个集合并起来
void Union(int S[], int root1, int root2)
{
if(root2==root1)
return;
S[root2]=root1;
}
2)优化
void Union_better(int S[],int root1,int root2){
if(root1==root2)
return;
if(S[root1]<S[root2]) //绝对值,所以root1结点多,把root2并给 root1
{
S[root1]=+S[root2];
S[root2]=root1;
}
else {
S[root2]+=S[root1];
S[root1]=root2;
}
}