📅  最后修改于: 2023-12-03 15:22:09.700000             🧑  作者: Mango
BFS(Breadth First Search)即广度优先搜索是图论中一种重要的搜索算法,常被用于解决最短路径问题,如寻找两点之间的最短路径,它也被称为宽度优先搜索。
BFS从起点出发,首先访问起点,然后访问起点的一度节点,再访问二度节点,以此类推,直到所有的节点都被访问为止。
BFS遍历图的过程是按层来进行的,每一层的节点都是和起点距离相同的节点,所以在遍历的时候可以用队列来存放每一层的节点,这样在遍历完一层后,再访问队列中的下一层节点。
BFS算法的步骤如下:
下面是使用Python语言实现使用BFS打印从给定源到目的地的所有路径的示例代码:
from collections import deque
def bfs_find_all_paths(graph, start, end):
paths = []
queue = deque([(start, [start])])
while queue:
node, path = queue.popleft()
if node == end:
paths.append(path)
else:
for next_node in graph[node] - set(path):
queue.append((next_node, path + [next_node]))
return paths
其中,函数bfs_find_all_paths的参数说明如下:
函数返回所有的从起点到终点的路径。
假设有如下图的邻接表:
graph = {
'A': {'B', 'C', 'D'},
'B': {'A', 'E'},
'C': {'A', 'E'},
'D': {'A', 'F'},
'E': {'B', 'C', 'F'},
'F': {'D', 'E'}
}
如果要从节点A出发,找到节点F所有的路径,可以调用函数bfs_find_all_paths进行计算:
result = bfs_find_all_paths(graph, 'A', 'F')
print(result)
结果为:
[
['A', 'D', 'F'],
['A', 'B', 'E', 'F'],
['A', 'C', 'E', 'F']
]
可以看到,从节点A到节点F有三条路径,分别是A->D->F,A->B->E->F和A->C->E->F。