📅  最后修改于: 2023-12-03 15:36:26.708000             🧑  作者: Mango
BFS(广度优先搜索)是一种常用的搜索算法,适用于寻找最短路径或最小步数的问题。在查找从一个顶点到静止的路径时,BFS是个好选择。下面将对BFS算法的实现步骤进行介绍。
下面是一个使用Python语言实现的BFS查找从一个顶点到静止的路径的例子,假设我们有以下有向图:
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': ['G'],
'E': ['F'],
'F': [],
'G': []
}
我们希望从起始顶点 A,搜索到终止顶点 G。代码如下:
from collections import deque
def bfs(graph, start, end):
# 创建队列
queue = deque()
# 初始化起始顶点为已访问
visited = set(start)
# 将起始顶点加入队列
queue.append((start, [start]))
while queue:
# 取出队首顶点
vertex, path = queue.popleft()
# 遍历邻接顶点
for neighbor in graph[vertex]:
# 如果邻接顶点未被访问,标记为已访问,并加入队列
if neighbor not in visited:
visited.add(neighbor)
queue.append((neighbor, path + [neighbor]))
# 如果找到终止顶点,输出路径并结束搜索
if neighbor == end:
return path + [neighbor]
# 如果队列为空,并且未找到终止顶点,说明两个点之间没有路径
return None
path = bfs(graph, 'A', 'G')
print(path) # ['A', 'B', 'D', 'G']
在以上代码中,我们以队列的形式维护待访问的顶点,用visited集合记录已经访问过的顶点,用path列表记录从起始顶点到当前顶点的路径。每次取出队首顶点后,遍历它的邻接顶点,将未访问过的顶点标记为已访问,并加入队列中。如果找到终止顶点,就返回从起始顶点到终止顶点的路径。如果队列为空,并且未找到终止顶点,说明两个点之间没有路径。