#include<stdio.h>
#include<string.h>
#include<math.h>
#define INF 1e9
#define MAXN 1000
int a[MAXN][MAXN],lowcost[MAXN];
void prim(int n)
{
int i,j,k,min;
int s[MAXN];
for(i=1;i<=n;i++)
{
lowcost[i]=a[i][1];
s[i]=0;
}
s[1]=1;
for(i=1;i<n;i++)
{
min=INF;
j=1;
for(k=2;k<=n;k++)
if((lowcost[k]<min)&&(!s[k]))
{
min=lowcost[k];
j=k;
}
s[j]=1;
for(k=2;k<=n;k++)
if((a[k][j]<lowcost[k])&&(!s[k]))
lowcost[k]=a[k][j];
}
}
int main()
{
int i,n,sum,j;
while(~scanf("%d",&n))//n个结点
{
memset(a,0,sizeof(a));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);//n个结点的邻接矩阵
prim(n);
sum=0;
for(i=1;i<=n;i++)//最小生成树的最短路径
sum+=lowcost[i];
printf("%d\n",sum);
}
return 0;
}
Prim 算法求最小生成树
最新推荐文章于 2022-11-19 12:07:21 发布
本文介绍了一个使用Prim算法寻找最小生成树的C语言实现。该程序通过输入顶点数量和邻接矩阵来构建图,并利用Prim算法计算出连接所有顶点的最小生成树的总权重。
1146

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



