http://acm.hdu.edu.cn/showproblem.php?pid=1233
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f int n; int mmp[101][101],dis[101],vis[101]; int prim() { int i,j,pos,result=0; memset(vis,0,sizeof(vis)); vis[1]=1; for(i=1; i<=n; i++) if(i!=1) dis[i]=mmp[1][i]; for(i=1; i<n; i++) { int minn=inf; for(j=1; j<=n; j++) { if(!vis[j]&&minn>dis[j]) minn=dis[pos=j];//注意别写反了 } result+=minn; vis[pos]=1; for(j=1; j<=n; j++) { if(!vis[j]&&dis[j]>mmp[pos][j]) dis[j]=mmp[pos][j]; } } return result; } int main() { while(scanf("%d",&n)!=EOF) { if(n==0) break; int m=n*(n-1)/2,i,j,a,b,c; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) mmp[i][j]=inf; } for(i=1; i<=m; i++) { scanf("%d%d%d",&a,&b,&c); mmp[a][b]=c; mmp[b][a]=c; } int ans=prim(); printf("%d\n",ans); } return 0; }