python实现Dijkstra + 堆优化 + 链式前向星

    最近在做网络拓扑相关的研究,各种经典算法自然是绕不过去的,由于数据量比较大,决定用链式前向星来存图,网上找一圈,PYTHON+链式前向星的代码没找到,于是乎决定自己写一下,不写不知道,写了才吓一跳,代码能力真是弱掉渣了。    一、背景介绍    1.链式前向星    内容引用自以下两篇文章:    https://blog.csdn.net/Binary_Heap/art...
摘要由CSDN通过智能技术生成

    最近在做网络拓扑相关的研究,各种经典算法自然是绕不过去的,由于数据量比较大,决定用链式前向星来存图,网上找一圈,PYTHON+链式前向星的代码没找到,于是乎决定自己写一下,不写不知道,写了才吓一跳,代码能力真是弱掉渣了。

    一、背景介绍

    1.链式前向星

    内容引用自以下两篇文章:

    https://blog.csdn.net/Binary_Heap/article/details/78209086

    https://blog.csdn.net/ACdreamers/article/details/16902023

    2.Dijkstra

    算法详解:https://blog.csdn.net/qq_35644234/article/details/60870719    

    编程思路概括:

    visited:已确定最短路径的顶点的集合,distance:源点到每个顶点的距离,初始设为无穷大,V每次确定的最小值对应的点

    V初始为源点

    a.从V出发,遍历以V为起点的所有边v表示任意一个与V相邻,且未确定最短路径的点,得到weight,如果 len(s

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Dijkstra算法是一种用于解决单源最短路径问题的经典算法,而二叉是一种常用的数据结构,用于实现Dijkstra算法中的优先队列。下面是Dijkstra算法结合二叉Python代码实现: ```python import heapq def dijkstra(graph, start): # 初始化距离字典,用于记录起点到各个节点的最短距离 distances = {node: float('inf') for node in graph} distances[start] = 0 # 初始化优先队列,用于存储待处理的节点 queue = [(0, start)] while queue: # 弹出当前最小距离的节点 current_distance, current_node = heapq.heappop(queue) # 如果当前节点已经被处理过,则跳过 if current_distance > distances[current_node]: continue # 遍历当前节点的邻居节点 for neighbor, weight in graph[current_node].items(): distance = current_distance + weight # 如果通过当前节点到达邻居节点的距离更短,则更新最短距离并加入优先队列 if distance < distances[neighbor]: distances[neighbor] = distance heapq.heappush(queue, (distance, neighbor)) return distances ``` 上述代码中,`graph`表示图的邻接表表示,`start`表示起点。`distances`字典用于记录起点到各个节点的最短距离,初始时将所有节点的距离设为无穷大,起点的距离设为0。`queue`优先队列用于存储待处理的节点,初始时将起点加入队列。 在算法的主循环中,每次从优先队列中弹出当前最小距离的节点,然后遍历其邻居节点。如果通过当前节点到达邻居节点的距离更短,则更新最短距离并将邻居节点加入优先队列。 最后,返回`distances`字典,即起点到各个节点的最短距离。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值