dijisktra方法python算法实现最短路径实例
时间: 2023-10-12 15:15:44 浏览: 119
Dijstra算法实现最短路径
好的,以下是 Dijkstra 算法的 Python 实现:
```python
import heapq
def dijkstra(graph, start):
# 初始化距离字典和前驱节点字典
dist = {node: float('inf') for node in graph}
dist[start] = 0
prev = {node: None for node in graph}
# 使用堆来实现优先队列
pq = [(0, start)]
while pq:
# 取出堆顶元素
curr_dist, curr_node = heapq.heappop(pq)
# 如果当前节点已经被访问过了,则跳过
if curr_dist > dist[curr_node]:
continue
# 遍历当前节点的邻居节点
for neighbor, weight in graph[curr_node].items():
distance = curr_dist + weight
# 如果通过当前节点到邻居节点的距离更短,则更新距离字典和前驱节点字典
if distance < dist[neighbor]:
dist[neighbor] = distance
prev[neighbor] = curr_node
# 将邻居节点加入堆中
heapq.heappush(pq, (distance, neighbor))
return dist, prev
```
其中,`graph` 参数是一个字典,表示图的邻接表,例如:
```python
graph = {
'A': {'B': 1, 'C': 4},
'B': {'A': 1, 'C': 2, 'D': 5},
'C': {'A': 4, 'B': 2, 'D': 1},
'D': {'B': 5, 'C': 1}
}
```
这个字典表示有 4 个节点 A、B、C、D,它们之间的边权分别为:
- A 到 B 的距离为 1
- A 到 C 的距离为 4
- B 到 C 的距离为 2
- B 到 D 的距离为 5
- C 到 D 的距离为 1
`start` 参数是起点节点的名称,例如 `'A'`。函数返回两个字典,分别表示起点到每个节点的最短距离和每个节点的前驱节点。
阅读全文