链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233
源代码:
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
#define N 100
#define max 99999
int edge[N][N];
int dist[N];
int visited[N];
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n)
{
int i,j,temp1,temp2=0,sum=0,p,q,weight;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
edge[i][j]=max;
for(i=1;i<=n*(n-1)/2;i++)
{
scanf("%d%d%d",&p,&q,&weight);
if(weight<edge[p][q]);
{
edge[p][q]=weight;
edge[q][p]=weight;
}
}
for(i=2;i<=n;i++)
dist[i]=edge[1][i];
dist[1]=0;
memset(visited,0,sizeof(visited));
visited[1]=1;
for(i=2;i<=n;i++)
{
temp1=max;
for(j=1;j<=n;j++)
{
if(!visited[j]&&dist[j]<temp1)
{
temp1=dist[j];
temp2=j;
}
}
sum+=temp1;
visited[temp2]=1;
for(j=1;j<=n;j++)
{
if(!visited[j]&&edge[temp2][j]<dist[j])
dist[j]=edge[temp2][j];
}
}
printf("%d\n",sum);
}
return 0;
}