图论-迪杰斯特拉算法的python实现

迪杰斯特拉算法详解
本文详细介绍迪杰斯特拉算法的实现原理及过程,利用动态规划的方法从起点出发计算图中各节点之间的最短路径。文章通过具体示例展示了如何使用堆数据结构优化算法效率,适合对图算法感兴趣的读者。
  1. 迪杰斯特拉算法采用动态规划的算法,从起点开始,遍历子节点并计算两节点之间的距离,并比较,更新数据后继续遍历。
  2. 该算法适用于边的距离为正数的简单图。
  3. 下面的算法通过堆的数据结构,通过hd记录两节点之间的距离并更新最小距离。
  4. 参数
    (1)s: 起点 (2) vetix_list: 图中的全部节点(3)graph: 图中节点的连接关系 (4)edge: 两节点间的距离
  5. 返回值:起始节点到所有节点最小距离的字典。
def Dijkstra(s, vertx_list, graph, edges):
    hd = heapdict()  # 构建堆字典,用于记录与更新两点(起始点与目的节点)间的距离
    distance_map = {
   
   }  # 记录起始节点到其它所有节点的最短路径
    for v in vertx_list:  # 将起始节点与其它节点的距离加入小堆
        if v == s:  # 节点自身与自身的距离设为0
            hd[(s, v)] = 0
            distance_map[(s, v)] = 0
        else:  # 节点间的距离设为无穷大
            hd[(s, v)] = np.inf
            distance_map[(s, v)] = np.inf
    edge = hd.peekitem()  # 堆顶的项目: (('A', 'A'), 0)
    while edge is not None:
        point_in_edge = edge[0]  # ('', '') 相连的两个点
        second_point = point_in_edge[1]  # 第二个节点
        update 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值