代码实现如下
#include<iostream>
using namespace std;
int father[1000];
void init(){
for(int i=0;i<=300;i++){
father[i] = i;
}
}
int findRoot(int x){
while(x != father[x]){
x = father[x];
}
return x;
}
void Union(int a,int b){
int faA = findRoot(a);
int faB = findRoot(b);
if(faA != faB){
father[faA] = faB;
}
}
int main(){
init();
father[1] = 1;
father[2] = 1;
father[3] = 2;
father[4] = 3;
father[5] = 5;
father[6] = 5;
Union(6,3);
cout<<findRoot(1)<<endl;
cout<<findRoot(5);
return 0;
}
优化寻找根结点函数
int findRoot(int x){
int temp1 = x;
while(x != father[x]){
x = father[x];
}
while(temp1 != father[temp1]){
int temp2 = temp1;
temp1 = father[temp1];
father[temp2] = x;
}
return x;
}