最小生成树-Prim算法

1.问题

在一个连通无向图G=(V, E)中,对于其中的每条边(u,v)∈E,赋予其权重w(u, v),若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。

2.解析

在这里插入图片描述

以上图为例具体计算步骤如下:

①图中有6个顶点,任意选择一个顶点作为起始点,一般都选择v1作为起始点。现在我们设集合U为当前所找到最小生成树的顶点,TE集合为边,则:U={v1}; TE={};

②现在找一个顶点在U,另一个顶点在V-U中的最小权值,即在边v1v2、v1v3、v1v4中找最小值。通过图中可知,边v1v3的权值最小,为1,则将顶点v3加入到集合U,(v1,v3)加入到TE,状态如下:U={v1,v3}; TE={(v1,v3)};

③继续寻找,即在边v1v2、v1v4、v2v3、v3v4、v3v5、v3v6中招最小值。通过图中可知,边v3v6的权值最小,为4,则将顶点v6加入到集合U,(v3,v6)加入到TE,状态如下:U={v1,v3,v6}; TE={(v1,v3),(v3,v6)};

④如此循环一下直到找到所有顶点为止。

下图展示了生成最小生成树的全过程:
在这里插入图片描述

3.设计

在构造过程中,设置了两个辅助数组:lowcost[]存放生成树顶点集合U内顶点到生成树外V-U各顶点的各边上的当前最小权值;nearvex[]记录生成树顶点集合外各顶点距离集合内哪个顶点最近(即权值最小).

void Prim(MGraph &G,MST &T,int u)
{
       
    int i,j
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值