利用广度优先算法找出最短路径python有向图
时间: 2023-07-26 20:45:09 浏览: 92
广度优先搜索求最短路径
5星 · 资源好评率100%
好的,针对您的问题,我可以为您提供以下的 Python 代码实现:
```python
from collections import deque
# 定义有向图
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
# 广度优先搜索函数
def bfs_shortest_path(graph, start, end):
# 创建一个队列,将起点加入队列中
queue = deque([(start, [start])])
# 如果起点和终点相同,则直接返回
if start == end:
return [start]
while queue:
# 取出队列中的第一个元素
(vertex, path) = queue.popleft()
# 遍历当前节点的所有邻居节点
for next_vertex in graph[vertex]:
# 如果邻居节点还没有在路径中出现过,则将其加入路径中
if next_vertex not in path:
new_path = path + [next_vertex]
# 如果邻居节点是终点,则返回路径
if next_vertex == end:
return new_path
# 否则将邻居节点加入队列中
else:
queue.append((next_vertex, new_path))
# 如果没有找到路径,则返回空列表
return []
# 测试
start = 'A'
end = 'F'
path = bfs_shortest_path(graph, start, end)
print(path)
```
在上面的实现中,我们使用了 collections 模块中的 deque 双向队列数据结构。我们首先将起点加入队列中,并把起点作为路径的第一个节点。然后,我们在每次迭代中从队列的左侧获取队列中的第一个元素,遍历当前节点的所有邻居节点,并将其加入路径中。如果邻居节点是终点,则返回路径。否则,将邻居节点加入队列中,以便后续继续遍历。如果没有找到路径,则返回空列表。
以上就是利用广度优先算法找出最短路径的 Python 实现代码。
阅读全文