#include <iostream>
#include <cstdio>
#define INF 0x7ffffff
using namespace std;
int map[105][105];
int n;
int sum;
void prim()
{
int i,j;
int dist[105];
bool s[105];
int v;
/*将第一个村庄到其他村庄的费用赋值给dist数组*/
for(i=1;i<=n;i++)
{
dist[i]=map[1][i];
s[i]=false;
}
s[1]=true; //将第一个村庄标记,并入s集中去
for(i=1;i<n;i++)
{
int min=INF;
/*在未被标记的村庄中找到离第一个村庄最近的一个*/
for(j=1;j<=n;j++)
{
if(!s[j]&&min>dist[j])
{
min=dist[j];
v=j;
}
}
s[v]=true; //将找到的v村庄标记,并入s集中去
sum+=min; //将费用累加
/*更新最短路径及距离*/
for(j=1;j<=n;j++)
{
if(!s[j]&&dist[j]>map[v][j])
dist[j]=map[v][j];
}
}
}
int main()
{
int i;
while(scanf("%d",&n)!=EOF&&n)
{
int t=n*(n-1)/2;
int x,y,v;
for(i=0;i<t;i++)
{
scanf("%d%d%d",&x,&y,&v);
map[x][y]=map[y][x]=v;
}
sum=0;
prim();
printf("%d\n",sum);
}
return 0;
}
HDU 1233 还是畅通工程
最新推荐文章于 2019-05-11 10:48:35 发布