数据结构学习日志之二十二--普里姆算法

假设在n个城市之间建立通信联络网,则联通n个城市最少需要n-1条线路,最多需要n(n-1)/2条线路,连接两个城市必然需要付出一定的代价,假设有一个连通网,代表n个城市和n个城市间可能设置的通信线路,网的顶点代表n个城市,边代表线路,边上的权值代表需要连接这两个城市付出的代价。对于n个顶点的连通网可以建立许多不同的生成树,那么有一棵树必然是耗费最小代价的,那么这棵树就是最小生成树。

生成最小生成树有两种算法,一种是普里姆(prim)算法,一种是克鲁斯卡尔(kruskal)算法

我们来介绍普里姆算法

此算法可以叫做“加点法”,每次迭代选择代价最小的边的点,加入到最小的生成树种。算法从某一个顶点s开始,逐渐长大覆盖整个连通网的所有顶点。


以上图为例: 

1.以a点开始,最小权值为1,另一顶点是c,将c加入到最小生成树中。此时树 a-c

2.在最小生成树的顶点找到一个权值最小且另一顶点不在树中的,最小权值是4,另一顶点是f,将f加入到树里面。此时树为a-c-f

3.重复上一个步骤,a-c-f-d;  a-c-f-d-b;  a-c-f-d-b-e;

实现:

以上图为例,假设初始点为a,把连接A点的线标记为紫线

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值