恐怖的并查集测试数据帮我找找错哪了。。。
程序代码:
#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); } }这是判断哪个输出结果错误的程序。。
测试数据.rar
(2.01 MB)
问题描述如下:
问题描述
大学的同学来自全国各地,对于远离家乡步入陌生的大学校园的大一新生来说,碰到老乡是多么激动的一件事,于是大家都热衷于问身边的同学是否于自己同乡,来自温州的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 编辑 ]