题目地址:点击打开链接
思路:最小生成树模板题
AC代码:
#include<stdio.h>
#define INF 100000
int dist[100][100];
int prim(int v,int n)
{
int i,j,sum=0,lowcost[100],visit[100],min,u;
for(i=1;i<=n;i++)
{
lowcost[i]=dist[v][i];
visit[i]=0;
}
visit[v]=1;
for(i=1;i<n;i++)
{
min=INF;
for(j=1;j<=n;j++)
{
if(visit[j]==0&&lowcost[j]<min)
{
min=lowcost[j];
u=j;
}
}
visit[u]=1;
sum+=min;
for(j=1;j<=n;j++)
{
if(visit[j]==0&&lowcost[j]>dist[u][j])
lowcost[j]=dist[u][j];
}
}
return sum;
}
int main()
{
int n,i,j,m,a,b,c;
while(scanf("%d",&n)&&n)
{
m=n*(n-1)/2;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
dist[i][j]=INF;
}
for(i=1;i<=n;i++)
{
dist[i][i]=0;
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
dist[a][b]=dist[b][a]=c;
}
printf("%d\n",prim(1,n));
}
return 0;
}