prim算法(最小生成树) python实现

Prim算法和Dijkstra算法类似,都是贪婪策略,寻找最短边。Prim算法聚焦于生成总路径最短的树,其costs数组记录点到父节点的边权,而非路径总和。在更新costs时,Prim算法直接比较边权和costs,而Dijkstra则考虑路径总和。此算法常用于网络铺设等场景。
摘要由CSDN通过智能技术生成

prim算法和dijkstra算法基本思路一模一样,都是贪婪。都是从costs边数组里面找最短边,把这个最短边的结点加入t(已经确定好最短边的点)中。然后再遍历这个结点的邻边,更新costs。

但是prim和dijkstra的区别在哪里呢?

  1. dijkstra的costs,costs的每个值存的是开始点到该点的路径权值总和
  2. 而prim的costs,costs的每个值存的是该点到该点父结点的边权,只有一条边的权值,不像dijkstra那样把之前走过的路径加上。
  3. 最后生成的生成树也不一样,dijkstra生成的是单源最短路径生成树,就是一个点到其他点的路径树,一般应用于运输;prim生成的是总路径最短生成树,就是这种树既把所有点连在一起,而且该树的总权值最小,一般应用于建造铺设。
  4. 后面的更新costs的时候,判断条件不一样。dijkstra在结点里面找边的时候,边权值加上该结点小于之前的costs就更新;而prim找边的时候,直接用边权值和之前的costs比,小于就更新。

图:
在这里插入图片描述

python代码

# 最小生成树python实现
def prim(graph):
    n = len(graph)
    costs = [99999 for _ in range(n)]  # 父结点到该结点的边权值
    costs[0] = 0
    parents = [-1 for _ in range(n)]
    visited = [False for
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值