多实例测试,num没有初始化,Runtime Error(ACCESS_VIOLATION) N次
#include<stdio.h> #include<stdlib.h> struct bian { int x,y,w; }b[5010]; int ji[110]; int n,m,num=0,l; int cmp(const void *a,const void *b) { struct bian *c=(struct bian *)a,*d=(struct bian *)b; return c->w-d->w; } int root(int i) { while(ji[i]!=i) i=ji[i]; return i; } int kruskal() { int i=0,xx,yy,max=0; while(l!=n) { xx=root(b[i].x); yy=root(b[i].y); while(xx==yy) { i++; xx=root(b[i].x); yy=root(b[i].y); } max+=b[i].w; if(xx<yy) ji[yy]=xx; else ji[xx]=yy; l++; } return max; } int main() { int i,x,y,w,bd,xx,yy; while(scanf("%d",&n),n) { m=n*(n-1)/2; l=1; num=0; for(i=1;i<=n;i++) ji[i]=i; for(i=1;i<=m;i++) { scanf("%d%d%d%d",&x,&y,&w,&bd); if(bd) { l++; xx=root(x); yy=root(y); if(yy>xx) ji[yy]=xx; else ji[xx]=yy; } else { b[num].x=x; b[num].y=y; b[num++].w=w; } } qsort(b,num,sizeof(b[0]),cmp); printf("%d\n",kruskal()); } return 0; }
#include<stdio.h> #include<string.h> int n,m; int map[110][110],vis[110],dist[110]; int zhao() { int i,xia=-1; for(i=1;i<=n;i++) if(vis[i]==0&&(xia==-1||dist[i]<dist[xia])) xia=i; return xia; } void geng(int j) { int i; for(i=1;i<=n;i++) if(vis[i]==1&&map[i][j]<dist[j]) dist[j]=map[i][j]; } int prim() { int i,j,xia,max=0,l=1; memset(vis,0,sizeof(vis)); vis[1]=1; for(i=1;i<=n;i++) dist[i]=map[1][i]; while(l!=n) { xia=zhao(); vis[xia]=1; max+=dist[xia]; for(j=1;j<=n;j++) if(vis[j]==0) geng(j); l++; } return max; } int main() { int i,x,y,w,b; while(scanf("%d",&n),n) { m=n*(n-1)/2; for(i=1;i<=m;i++) { scanf("%d%d%d%d",&x,&y,&w,&b); if(b) map[x][y]=map[y][x]=0; else map[x][y]=map[y][x]=w; map[x][x]=0; } printf("%d\n",prim()); } return 0; }