并查集算法程序

初始化

把每个点所在集合初始化为其自身。

通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为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; 
}

原文地址:https://www.cnblogs.com/zhangdongdong/p/2796615.html