Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
用kluscal算法为什么会WA呢?以下代码上ZOJ是是AC的,可是在POJ上就是WA,大牛给看下~~我用prim在poj上过了的,现在改用kluscal,为什么就wa了呢? 我已经注意到每行数据后可能会有空格的情况了。 哪位大牛给看下,感激ing~~~~ 以下是我的代码: #include<stdio.h> #include<stdlib.h> #define max 101 typedef struct //定义边类型 { int fromvex,endvex,cost; }edge; edge G[77]; //G表示总的边集合 int p,relation[27]; //p表示边的总数,relation表示连通分量静态链表 int cmp(const void *a,const void *b) { return ((edge *)a)->cost - ((edge*)b)->cost; } int KLUSCAL(int m) { int i,path=0,count=0,x,y; qsort(G,p,sizeof(edge),cmp); //按边的权值,从小到大排序 for(i=0;i<p;i++) { x=G[i].fromvex; y=G[i].endvex; while(relation[x]!=0 ) x=relation[x]; //一直找到x所在分量的表尾,下同 while(relation[y]!=0 ) y=relation[y]; if(x!=y) //如果起点和终点不在同一个连通分量中 { count++; //边数加1 path+=G[i].cost; //权值累加 relation[x]=y; //链接两个连通分量链表 } if(count==m-1) break; //如果选出了m-1条边,则构造好了最小生成树 } return path; //返回权值总和 } int main() { int n,i,t,j,m; char ch1,ch2,temp; while(scanf("%d",&n),n) { m=n; p=0; for(i=1;i<=m;i++) //初始化连通分量链表 relation[i]=0; while(temp=getchar()!='\n'); //每行数据后可能会有多余的空格 n--; while(n--) { ch1=getchar(); getchar(); i=ch1-64; scanf("%d",&t); getchar(); while(t--) { ch2=getchar(); getchar(); j=ch2-64; G[p].fromvex=i; G[p].endvex=j; scanf("%d",&G[p++].cost); temp=getchar(); } while(temp!='\n') temp=getchar(); } printf("%d\n",KLUSCAL(m)); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator