#include<stdio.h>
int guanxi[1100];
int find(int a)
{
if(guanxi[a]==a)
return a;
else
return guanxi[a]=find(guanxi[a]); //寻找关系
}
int lianjie(int a,int b)
{
int x,y;
x=find(a);
y=find(b); //找连接
guanxi[x]=y; //建立于最开始的那个元素的链接
}
int main()
{
int n,m;
int a,b;
int i,j,sum;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
for(i=0;i<=1000;i++)
guanxi[i]=i; 讲所有元素初始化为只跟自己有关系
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
lianjie(a,b); 找连接
}
sum=0;
for(i=1;i<=n;i++)
if(guanxi[i]==i)
sum++;
printf("%d\n",sum-1);
}
return 0;
}
int guanxi[1100];
int find(int a)
{
if(guanxi[a]==a)
return a;
else
return guanxi[a]=find(guanxi[a]); //寻找关系
}
int lianjie(int a,int b)
{
int x,y;
x=find(a);
y=find(b); //找连接
guanxi[x]=y; //建立于最开始的那个元素的链接
}
int main()
{
int n,m;
int a,b;
int i,j,sum;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
for(i=0;i<=1000;i++)
guanxi[i]=i; 讲所有元素初始化为只跟自己有关系
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
lianjie(a,b); 找连接
}
sum=0;
for(i=1;i<=n;i++)
if(guanxi[i]==i)
sum++;
printf("%d\n",sum-1);
}
return 0;
}
本文详细介绍了并查集算法的基本原理及其实现过程。通过具体的代码示例,展示了如何使用并查集来解决元素间的连通性问题。文章还解释了初始化、查找与合并操作,并通过循环迭代实现了对输入数据的处理。

被折叠的 条评论
为什么被折叠?



