利用广度优先算法找出最短路径python有向图
时间: 2023-07-26 22:40:48 浏览: 101
python广度优先搜索得到两点间最短路径
5星 · 资源好评率100%
好的,针对你的问题,我可以给出以下的 Python 代码实现:
```
from collections import deque
# 定义有向图的邻接表表示
graph = {
'A': {'B': 1, 'C': 4},
'B': {'D': 2},
'C': {'D': 1},
'D': {'E': 3},
'E': {}
}
# 定义广度优先算法求最短路径
def bfs_shortest_path(graph, start, end):
queue = deque([(start, [start])]) # 使用双向队列,初始化为起点
visited = set() # 记录已访问的节点
while queue:
node, path = queue.popleft() # 取出队列中的节点和路径
if node not in visited: # 如果节点没有被访问过
visited.add(node) # 标记为已访问
if node == end: # 如果找到了终点
return path # 返回路径
for neighbor, weight in graph[node].items(): # 遍历邻居节点
if neighbor not in visited: # 如果邻居节点没有被访问过
queue.append((neighbor, path + [neighbor])) # 将邻居节点加入队列,并记录路径
return None # 如果没有找到路径,返回 None
# 测试代码
start = 'A'
end = 'E'
shortest_path = bfs_shortest_path(graph, start, end)
if shortest_path:
print(f"The shortest path from {start} to {end} is: {' -> '.join(shortest_path)}")
else:
print(f"There is no path from {start} to {end}")
```
在这个例子中,我们定义了一个有向图的邻接表表示,使用 `deque` 实现双向队列,并采用广度优先搜索算法来搜索最短路径。最后,我们利用测试代码对算法进行测试,输出最短路径结果。
希望这个例子能够帮助你理解如何利用广度优先算法找出最短路径。
阅读全文