对普利姆算法的理解(大话数据结构)。

普利姆算法用来做什么?

·要弄清楚普利姆算法的用途,首先要知道连通图是什么,

连通图就是图中任一两点可达。

·然后就是树的概念,

这里的树不是数据结构的中的树,这里树的概念是:无环的连通图。

·然后我们就可以来讲普利姆算法了,普利姆算法是用来求图的最小生成树(即最小权重生成树)的。

他算法的思路是这样的:① 从图中任意找一个点,加入到最小生成树中;

                                        ②在剩下的顶点中,找权重最小的边,将该顶点纳入最小生成树;

                                        ③重复步骤②;

·在实现该算法的过程中,主要用到两个数组lowcost[maxvex],adjvex[maxvex],只要理解这两个数组的意义,就能理解这个算法的实现。

lowcost[maxvex]数组的意义:lowcost[j]表示,在已经被纳入生成树的顶点中,他们到顶点 j 的最小权重的值。

adjvex[maxvex]数组的意义:adjvex[j]表示,j 这个顶点的最小权重,是以哪个顶点为起点的。

void prim(MGraph G){

    int lowcost[MAXVEX], adjvex[MAXVEX];    //普里姆算法的两个关键数组
    int i, j, min;      //i,j是循环用到的临时变量,k用来存放找到的顶点

    //初始化
    lowcost[0] = 0;
    adjvex[0] = 0;
    for(i = 1; i < numVex; i ++){
        lowcost[i] = G.arc[0][i];
        adjvex[i] = 0;
    }
    //普利姆算法的核心
    for(i = 1; i < numVex; i ++){
        min = INTINITY;

        //找出在到已有生成树中,权重最小的顶点,
        for(j = 1, k = 0; j < numVex; j ++){
            if(lowcost[j] != 0 && lowcost[j] < num){
                min = lowcost[j];
                k = j;
            }
        }
        lowcost[k] = 0;
        printf("(%d,%d)", adjvex[k], k);
        //将顶点k纳入生成树之后,更新lowcost[]和adjvex[]的数据
        for(j = 1; j < numVex; j ++){
            if(lowcost[j] != 0 && G.arc[k][j] < lowcost[j]){
                lowcost[j] = G.arc[k][j];
                adjvex[j] = k;
            }
        }
    }
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值