恐怖的并查集测试数据帮我找找错哪了。。。
程序代码:#include<stdio.h>
#include<stdlib.h>
const int MAXSIZE = 500001;
int pre[MAXSIZE];
int i,n,m;
int Find(int x)
{
int p = x;
int temp;
while( pre[p] > 0 )
p = pre[p];
while( x != p )
{
temp= pre[x];
pre[x] = p;
x = temp;
}
return x;
}
void Union(int r1, int r2)
{
int a = Find(r1);
int b = Find(r2);
if( a == b )
return ;
if( pre[a] < pre[b] )
{
pre[a] = pre[b];
pre[b] = a;
}
else
{
pre[b] = pre[a];
pre[a] = b;
}
}
void Initi(void)
{
for(i=1;i<=n;i++)
pre[i] = -1;
}
int main()
{
FILE *fp1,*fp2;
fp1=fopen("in.txt","r+");
fp2=fopen("output.txt","w+");
int x,y,count,flag;
while(fscanf(fp1,"%d %d",&n,&m)!=EOF)
{
flag=0;
if(n==0 && m==0)
break;
Initi();
for(i=1;i<=m;i++)
{
fscanf(fp1,"%d %d",&x,&y);
if(x==1 || y==1 &&flag==0)
flag=1;
Union(x,y);
}
count=0;
if(flag==1)
{
for(i=1;i<=n;i++)
if(pre[i]!=-1)
count++;
}
fprintf(fp2,"%d\n",count);
}
fclose(fp1);
fclose(fp2);
}
这是主要的程序
程序代码:#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp1,*fp2,*fp3;
int a,b,n=0;
fp1=fopen("out.txt","r+");
fp2=fopen("output.txt","r+");
fp3=fopen("result.txt","w+");
while(fscanf(fp1,"%d",&a) && fscanf(fp2,"%d",&b)!=EOF)
{
n++;
if(a!=b)
fprintf(fp3,"%d\n",n);
}
}
这是判断哪个输出结果错误的程序。。问题描述如下:
问题描述
大学的同学来自全国各地,对于远离家乡步入陌生的大学校园的大一新生来说,碰到老乡是多么激动的一件事,于是大家都热衷于问身边的同学是否于自己同乡,来自温州的Kongyi尤其热衷。但是大家都不告诉Kongyi他们来自哪里,只是说与谁同乡,从所给的信息中,你能告诉Kongyi有多少人确定是她的同乡吗?
输入
每个测试实例首先包括2个整数,N(1 <= N <= 1000),M(0 <= M <= N*(N-1)/2)。代表现有N个人(用1~N编号)和M组关系;在接下来的M行里,每行包括2个整数,a,b。 代表a跟b是同乡,当N = 0,M = 0输入结束。已知1表示Kongyi本人。
输出
对于每个测试试实,输出一个整数,代表Kongyi同乡的个数。
主要是第29、72、80个测试数据有问题。。帮忙看看!!!!谢谢了






[ 本帖最后由 liucs116 于 2010-4-10 16:30 编辑 ]






