『最小生成树』Prim算法——加点法(优先队列/堆优化 + C++实现 + 例题)

『算法原理』


         在一个连通网的所有生成树中,各边的代价之和最小的那颗生成树称为该连通网的最小代价生成树(Minimum Cost Spanning Tree),简称最小生成树(MST)

        Prim算法之所以叫加点法,就是因为其本质是一个点一个点地加入到最小生成树中。

算法步骤如下:

设有一无向连通图G,有n个顶点。

  • a.初始化——任意找图中的一点作为源点,视为最开始的生成树,然后更新所有的点和生成树的权值(距离),将不能直接和生成树连通的点的权值赋为无穷大。
  • b.加点——将离生成树最近的(权值最小)的点V加入到生成树中,然后更新生成树和其他生成树外的点的距离(权值)
  • c.重复b步骤直至所有顶点都被加入到生成树中,即生成树中加入了n个点

下面用图示来解释这个过程。

对于图G

a.初始化——任意找图中的一点作为源点,视为最开始的生成树,然后更新所有的点和生成树的权值(距离),将不能直接和生成树连通的点的权值赋为无穷大。(这里选取 A 作为源点)

  • U={A}
  • V-U={B, C, D, E, F}
  • cost={(A, B)34, (A, C)46, (A, D
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值