python最短路径算法完整代码
时间: 2023-10-13 20:26:56 浏览: 38
以下是 Dijkstra 算法的 Python 实现代码,可以求解一个有向图中节点之间的最短路径。
```python
import heapq
def dijkstra(graph, start):
"""Dijkstra算法求解最短路径"""
# 初始化距离字典,用于存储起点到每个节点的最短距离
distances = {node: float('inf') for node in graph}
# 起点到自身的距离为0
distances[start] = 0
# 使用堆优化,存储待扩展的节点
heap = []
heapq.heappush(heap, (distances[start], start))
while heap:
# 弹出距离起点最近的节点
(current_distance, current_node) = heapq.heappop(heap)
# 如果当前节点已经被访问过,则跳过
if current_distance > distances[current_node]:
continue
# 遍历当前节点的所有邻居节点
for neighbor, weight in graph[current_node].items():
# 计算起点经过当前节点到达邻居节点的距离
new_distance = current_distance + weight
# 如果新的距离比邻居节点当前记录的最短距离还短,则更新最短距离
if new_distance < distances[neighbor]:
distances[neighbor] = new_distance
# 将邻居节点加入堆中,以便后续扩展
heapq.heappush(heap, (new_distance, neighbor))
return distances
```
在调用 dijkstra 函数时,需要传递一个字典类型的有向图和起点节点。字典的键是节点名,值是一个字典,表示该节点的所有邻居节点及其边权重。
例如,以下是一个简单的有向图的字典表示:
```python
graph = {
'A': {'B': 1, 'C': 4},
'B': {'C': 2, 'D': 5},
'C': {'D': 1},
'D': {}
}
```
调用方法:
```python
distances = dijkstra(graph, 'A')
print(distances)
```
输出结果:
```python
{'A': 0, 'B': 1, 'C': 3, 'D': 4}
```
阅读全文