dijkstra算法求解路径规划问题 python代码
时间: 2023-06-30 08:09:43 浏览: 146
python实现的dijkstra算法路径规划源码.zip
5星 · 资源好评率100%
以下是使用Dijkstra算法求解路径规划问题的Python代码。
```python
import heapq
def dijkstra(graph, start, end):
# 初始化距离和前驱字典
distances = {vertex: float('infinity') for vertex in graph}
distances[start] = 0
previous_vertices = {vertex: None for vertex in graph}
# 创建一个优先队列,将起点放进去
vertices = [(0, start)]
heapq.heapify(vertices)
while vertices:
# 从优先队列中取出距离最小的节点
current_distance, current_vertex = heapq.heappop(vertices)
# 如果当前节点已经到达终点,则返回路径
if current_vertex == end:
path = []
while previous_vertices[current_vertex] is not None:
path.append(current_vertex)
current_vertex = previous_vertices[current_vertex]
path.append(start)
return path[::-1]
# 遍历当前节点的邻居节点
for neighbor, weight in graph[current_vertex].items():
distance = current_distance + weight
# 如果新的距离比原来的距离更短,则更新距离和前驱字典
if distance < distances[neighbor]:
distances[neighbor] = distance
previous_vertices[neighbor] = current_vertex
heapq.heappush(vertices, (distance, neighbor))
# 如果无法到达终点,则返回None
return None
```
其中,`graph` 是一个字典,表示图的邻接表。例如,对于如下的图:
```
A --5-- B --3-- C
| | |
2 4 6
| | |
D --7-- E --1-- F
```
邻接表可以表示为:
```python
graph = {
'A': {'B': 5, 'D': 2},
'B': {'A': 5, 'C': 3, 'E': 4},
'C': {'B': 3, 'F': 6},
'D': {'A': 2, 'E': 7},
'E': {'B': 4, 'D': 7, 'F': 1},
'F': {'C': 6, 'E': 1}
}
```
`start` 和 `end` 分别是起点和终点的名称。例如,如果要从节点 A 到节点 F,可以调用函数:
```python
path = dijkstra(graph, 'A', 'F')
```
函数返回的是一个列表,表示从起点到终点的路径,例如 `[A, B, E, F]`。如果无法到达终点,则返回 `None`。
阅读全文