/*一般来说,一个并查集对应三个操作:
1、初始化( Init()函数 )
2、查找函数( Find()函数 )
3、合并集合函数( Join()函数 )*/
const int N=1005;//假设有1005个点
int pre[N];//记录前驱节点
//初始化
void init(int n)
{
for(int i=0;i<n;i++){
pre[i]=i; //初始的时候使每个结点的前驱节点为自身
}
}
//查
int find(int x)
{
if(x==pre[x])return x;
return pre[x]=find(pre[x]); //压缩路径
}
//并
void merge(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx!=fy){
pre[fx]=fy; //这一步根据实际情况来判断谁是谁的前驱节点
}
}
并查集(Disjoint_set)
最新推荐文章于 2024-10-16 19:08:56 发布