1.目的要求:
(1)理解并查集算法划分集合的合理性
(2)理解路径压缩对并查集算法的优化
(3)利用并查集算法解决Online Judge上面的题目
2.实验内容:
(1)统计给定的各种数据所在的集合个数,存在联系的数据即为一个集合 -来源HDU1232
3.实验报告:
(1)
#include<stdio.h>
const int MAXN=1010;
int F[MAXN];
int find(int t)
{
if(F[t]==-1) return t;
return F[t]=find(F[t]);
}
void bing(int a,int b)
{
int t1=find(a);
int t2=find(b);
if(t1!=t2) F[t1]=t2;
}
int main()
{
int n,m;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
for(int i=1;i<=n;i++) F[i]=-1;
int a,b;
while(m--)
{
scanf("%d%d",&a,&b);
bing(a,b);
}
int res=0;
for(int i=1;i<=n;i++)
if(F[i]==-1) res++;
printf("%d\n",res-1);
}
return 0;
}