码迷,mamicode.com
首页 > 编程语言 > 详细

Agri-Net(prim算法,最小生成树问题)

时间:2015-11-28 18:20:13      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

看图便知道:技术分享

技术分享 

来来上代码:
 
 
 
 
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
 
 
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int tu[n+1][n+1];
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                scanf("%d",&tu[i][j]);
        int V[n+1];//存放生成的节点
        for(int i=1; i<=n; i++)
            V[i]=tu[1][i];//先初始化,别急,后面的会变的
        bool op[n+1];//标记此节点是否访问过
        memset(op,true,sizeof(op));
        int sum=0;
        op[1]=false;
        for(int i=1; i<n; i++)//n-1条边
        {
            int min=0x3f3f3f3f;
            int flag=0;
            for(int j=1; j<=n; j++)
                if( op[j]&&V[j]<min)//找节点中权值最小的并且是没有找过的
                {
                    min=V[j];
                    flag=j;//记录下来
                }
            //cout<<min<<endl;
            op[flag]=false;//此节点已经访问过
            sum+=min;//加起来
            for(int j=1; j<=n; j++)
                if(op[j]&&tu[flag][j]<V[j])//在刚才找的节点后面继续找此节点后面权值的最小的节点
                    V[j]=tu[flag][j];//放到最生成树的节点中
        }
        printf("%d\n",sum);
    }
    return 0;
}
/*
4
0 4 9 21
4 0 8 17
9 8 0 16
21 17 16 0
 
*/
 
 
 
 
 
 
 
 
 
 
 
 

Agri-Net(prim算法,最小生成树问题)

标签:

原文地址:http://www.cnblogs.com/aaaadengchaochao/p/5002922.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!