您的位置:首页 > 其它

并查集模板

2014-10-21 20:23 225 查看
其主要由查找函数和合并函数组成

有两种不同表现形式的查找函数,一种是递归代码简单不过比较费时间,一种是while循环代码相对长不过省时。

模板如下

int findx(int x)
{
int r;
r=x;
while(r!=bin[r])
{
r=bin[r];
}
int k,j;
k=x;
while(k!=r)
{
j=bin[k];
bin[k]=r;
k=j;
}
return r;
}
void merge(int x,int y)
{
int fx,fy;
fx=findx(x);
fy=findx(y);
if(fx!=fy)
{
bin[fx]=fy;
}
}
</pre><pre name="code" class="cpp">int find(int x)
{
if(x!=s[x])
s[x]=find(s[x]);
return s[x];
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)s[fx]=fy;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: