题意描述:首先输入一个n,表示农场的个数,接下来输入一个N*N的矩阵,表示每个农场之间的距离。当然,对角线将会是0,因为不会有线路从自身农场到它本身。
解题思路:prim模板题,题目给出的是一个n*n连通性矩阵,所以可以定义一个二维数组把它存进去,然后就根据模板敲就可
错误分析:因为求连接整个农场集所需的最小光纤和所以找到n-1条边就够了🥓
AC代码 🎠
#include<stdio.h>
int main()
{
int n,i,j,u,v,min;
int inf=99999999;
int e[110][110],dis[110],book[110];
while(~scanf("%d",&n))
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&e[i][j]);
}
}
for(i=1;i<=n;i++)
{
book[i]=0;
dis[i]=e[1][i];
}
book[1]=1;
int sum=0;
for(i=1;i<n;i++)
{
min=inf;
for(j=1;j<=n;j++)
{
if(book[j]==0&&dis[j]<min)
{
min=dis[j];
u=j;
}
}
book[u]=1;
sum+=dis[u];
for(v=1;v<=n;v++)
{
if(book[v]==0&&dis[v]>e[u][v])
dis[v]=e[u][v];
}
}
printf("%d\n",sum);
}
return 0;
}