#include<stdio.h> #include<stdlib.h> #include<string.h> int inf=0x7fffffff; int set[110]; struct val { int x,y,v; }e[10000]; int n,m; int cmp(const void *a,const void *b) { return ((val *)a)->v - ((val *)b)->v;//注意加括号。 } int find(int a) { return set[a]==a?a:find(set[a]); } int kruskal() { int sum=0; for(int i=1;i<=m;i++) { int x=e[i].x,y=e[i].y,v=e[i].v; int a=find(x),b=find(y); if(a!=b) { set[a]=b; sum+=v; } } return sum; } int main() { int x,y,v; while(scanf("%d",&n),n) { m=(n*(n-1))/2; for(int i=1;i<=n;i++) { set[i]=i; } for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&v); e[i].x=x; e[i].y=y; e[i].v=v; } qsort(e+1,m,sizeof(e[0]),cmp); int res=kruskal(); printf("%d\n",res); } //system("pause"); return 0; }
编辑器加载中...