并查集算法程序
初始化
把每个点所在集合初始化为其自身。
通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N)。
查找
查找元素所在的集合,即根节点。
合并
将两个元素所在的集合合并为一个集合。
通常来说,合并之前,应先判断两个元素是否属于同一集合,这可用上面的“查找”操作实现。
C++程序
#include <iostream>
using namespace std;
int father[30001],m,n,a,b,temp;;
void init(int v){
father[v]=v;
}
int find(int v){
if(father[v]==v)
return v;
return father[v]=find(father[v]);
}
void unionSet(int a,int b){
a=find(a);
b=find(b);
if(father[a]>father[b])
father[a]=b;
else
father[b]=a;
}
int main(){
cin>>m;
cout<<"对已下数并查:"<<endl;
for(int i=1;i<=m;i++){
init(i);
cout<<i<<" ";
}
cin>>n;
for(int j=1;j<=n;j++){
cin>>a>>b;
unionSet(a,b);
}
cout<<"结果如下:"<<endl;
for(int i=1;i<=m;i++){
if(father[i]==i){
temp=father[i];
for(int j=temp;j<=m;j++){
if(father[j]==temp)
cout<<j<<" ";
}
cout<<endl;
}
}
return 0;
}
栋栋

浙公网安备 33010602011771号