用python写最短路径的实例,
时间: 2024-03-13 14:22:39 浏览: 50
好的,下面是一个使用Dijkstra算法求最短路径的Python实现:
```
import heapq
def dijkstra(graph, start):
# 初始化距离字典和前驱节点字典
dist = {v: float('inf') for v in graph}
dist[start] = 0
prev = {v: None for v in graph}
# 构建优先队列,初始时只包含起点
pq = [(0, start)]
# 开始迭代
while pq:
# 取出距离最小的节点
d, u = heapq.heappop(pq)
# 如果该节点已经被访问过,则跳过
if d > dist[u]:
continue
# 遍历该节点的所有邻居,并更新距离和前驱节点
for v, w in graph[u].items():
new_dist = dist[u] + w
if new_dist < dist[v]:
dist[v] = new_dist
prev[v] = u
heapq.heappush(pq, (new_dist, v))
# 返回最短路径和距离
path = []
u = end
while prev[u]:
path.append(u)
u = prev[u]
path.append(start)
path.reverse()
return path, dist[end]
# 测试
graph = {
'A': {'B': 5, 'C': 1},
'B': {'A': 5, 'C': 2, 'D': 1},
'C': {'A': 1, 'B': 2, 'D': 4, 'E': 8},
'D': {'B': 1, 'C': 4, 'E': 3, 'F': 6},
'E': {'C': 8, 'D': 3},
'F': {'D': 6}
}
start = 'A'
end = 'F'
path, dist = dijkstra(graph, start)
print('最短路径:', path)
print('最短距离:', dist)
```
这个实现中,首先定义了一个`dijkstra`函数,它接受一个字典表示的图和起点作为参数,返回最短路径和距离。在函数中,我们首先初始化距离字典和前驱节点字典,然后构建一个优先队列,初始时只包含起点。然后开始迭代,每次从优先队列中取出距离最小的节点,并遍历其所有邻居,更新距离和前驱节点。最终返回最短路径和距离。
在测试代码中,我们定义了一个示例图,并从起点A到终点F求最短路径和距离,并输出结果。
阅读全文