//生成树第一道,prim算法
#include<stdio.h>
#define maxweght 32767;
int main()
{
int i,j,k,n,x,b,lowcost[101],close[101],a[101][101],mincost;
long int sum;
while(scanf("%d",&n)&&n!=0)
{
sum=0;
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++){
scanf("%d%d",&x,&b);
scanf("%d",&a[x][b]);
a[b][x]=a[x][b];
}
a[i][i]=0;
}
for(i=1;i<=n;i++)
{
lowcost[i]=a[1][i];
close[i]=1;
}
lowcost[1]=-1;
for(i=2;i<=n;i++)
{
mincost=maxweght;
for(j=2;j<=n;j++){
if(lowcost[j]>0&&lowcost[j]<mincost)
{
mincost=lowcost[j];
k=j;
}
}
sum+=lowcost[k];
lowcost[k]=-1;
for(j=2;j<=n;j++){
if(a[k][j]<lowcost[j]){
lowcost[j]=a[k][j];
close[j]=k;
}
}
}
printf("%ld/n",sum);
}
return 0;
}
本文介绍了一个使用Prim算法寻找图的最小生成树的C语言实现。通过不断选择可加入生成树的最小权重边,最终形成一棵包含所有顶点且总边权最小的树。代码详细展示了Prim算法的具体步骤。
1428

被折叠的 条评论
为什么被折叠?



