| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 39499 | Accepted: 16017 |
Description
Input
Output
Sample Input
4 0 4 9 21 4 0 8 17 9 8 0 16 21 17 16 0
Sample Output
28
Source
#include <cstdio>
#include <cstring>
const int Max=0x3f3f3f3f;
const int maxn=100+10;
int map[maxn][maxn],low[maxn],visit[maxn];
int n;
int prim()
{
int pos,i,j,min,sum=0;
memset(visit,0,sizeof(visit));//初始化visit数组
visit[1]=1;//从第一个点开始
pos=1;//标记和记录这个点
for(i=1;i<=n;i++)
low[i]=map[pos][i];//用low数组记录权值
for(i=1;i<n;i++) //第一个点已经进行了,还需要进行n-1次;
{
min=Max;//把min赋初值
for(j=1;j<=n;j++)
{
if(visit[j]==0&&low[j]!=0&&low[j]<min)//比较权值的大小
{
min=low[j];
pos=j;//记录权值最小的点,下一次从这个点开始
}
}
sum+=min;//记录权值的和
visit[pos]=1;//标记访问
for(j=1;j<=n;j++)//访问下一个点
{
if(visit[j]==0&&low[j]>map[pos][j])
low[j]=map[pos][j];
}
}
return sum;
}
int main()
{
int sum,i,j;
while(scanf("%d",&n)!=EOF)
{
sum=0;
memset(map,Max,sizeof(map));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
sum=prim();
printf("%d\n",sum);
}
return 0;
}
poj 1258 Agri-Net (最小生成树 prim),布布扣,bubuko.com
poj 1258 Agri-Net (最小生成树 prim)
原文:http://blog.csdn.net/whjkm/article/details/38271731