http://acm.hdu.edu.cn/showproblem.php?pid=1233
#include<stdio.h> #include<string.h> #define INF 1000000000 #define N 110 int map[N][N],low[N],vis[N],n; void prim() { int i,j,k,min,sum=0; memset(vis,0,sizeof(vis)); for(i=1;i<=n;i++) low[i]=map[1][i]; vis[1]=1; for(i=1;i<n;i++) { min=INF; for(j=1;j<=n;j++) if(!vis[j]&&min>low[j]) { min=low[j]; k=j; } vis[k]=1; sum+=min; for(j=1;j<=n;j++) { if(!vis[j]&&low[j]>map[k][j]) low[j]=map[k][j]; } } printf("%d\n",sum); } int main(void) { int i,j,a,b,w; while(scanf("%d",&n)&&n) { for(i=0;i<n*(n-1)/2;i++) { scanf("%d%d%d",&a,&b,&w); map[a][b]=map[b][a]=w; } prim(); } return 0; }