#include<stdio.h>
int main()
{
int n,m;
while(~scanf("%d",&n)&&n)
{
int i,j,k,min,t1,t2,t3,a[110][110];
int e[110][110],dis[110],book[110]= {0};
int inf=999999999;
int count=0,sum=0;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(i==j)e[i][j]=0;
else e[i][j]=inf;
for(i=1; i<=n; i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
e[i][j]=a[i][j];
}
}
for(i=1; i<=n; i++)
dis[i]=e[1][i];
book[1]=1;
count++;
while(count<n)
{
min=inf;
for(i=1; i<=n; i++)
{
if(book[i]==0&&dis[i]<min)
{
min=dis[i];
j=i;
}
}
book[j]=1;
count++;
sum+=dis[j];
for(k=1; k<=n; k++)
{
if(book[k]==0&&dis[k]>e[j][k])
dis[k]=e[j][k];
}
}printf("%d\n",sum);
}
}
Prim 模板
最新推荐文章于 2024-07-24 01:35:50 发布
本文介绍了一个使用C语言实现的图的最小生成树算法。通过不断选择当前未加入生成树中距离最近的顶点,逐步构建起连接所有顶点的最小权重路径集合。该算法首先初始化图的邻接矩阵,然后通过Prim算法逐步计算出从任意一点出发到达其它各点的最短路径总和。
341

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



