dijkstra+二叉堆Python代码实现
时间: 2024-04-24 13:20:02 浏览: 110
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`字典,即起点到各个节点的最短距离。
阅读全文