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