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

Prim算法

时间:2016-04-12 22:38:34      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

Prim算法,代码核心在于一个双重循环,所以算法时间复杂度为O(n*n)。

该算法与图中的边数无关。

适用于计算边稠密的最小生成树。

 

///     Prim

#define NUM 1000
#define maxint 1000000000

///形参n为顶点个数,数组c为无向连通带权图的邻接矩阵
void Prim(int n,int c[][NUM])
{
    int lowcost[NUM];       ///

    int closest[NUM];       ///节点

    int s[NUM]={false};     ///标记

    ///初始化数组
    for(int i=1;i<=n;i++)
    {
        lowcost[i]=c[1][i];
        closest[i]=1;
        s[i]=false;
    }

    ///从顶点v1开始
    s[1]=true;

    ///处理其余n-1个顶点
    for(int i=1;i<n;i++)
    {
        ///在未处理的节点中,找最小权的节点
        int min=maxint;
        int j=1;    ///节点
        for(int k=2;k<=n;k++)
        {
            if(lowcost[i]<min&&(!s[k]))
            {
                min=lowcost[i];
                j=k;
            }
        }

        printf("%d %d\n",closest[j],j);

        ///加入节点到解集中
        s[j]=true;

        ///根据新的节点,更新数组lowcost,和,closest
        for(int k=2;k<=n;k++)
        {
            if((c[j][k]<lowcost[k])&&(!s[k]))
            {
                lowcost[k]=c[j][k];
                closest[k]=j;
            }
        }
    }
}

 

Prim算法

标签:

原文地址:http://www.cnblogs.com/TreeDream/p/5384523.html

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