| 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