📅  最后修改于: 2023-12-03 15:37:16.320000             🧑  作者: Mango
在图的搜索中,广度优先搜索(BFS)算法是一种重要的算法,它可以用于解决许多不同的问题。
图 BFS(广度优先搜索)是一种遍历或搜索图的方法,其主要思想是从起始节点开始,按照距离递增的顺序搜索与该节点相连的其他节点。该算法通常使用队列来实现广度优先搜索。
图 BFS 可以用于许多不同的问题。以下是几个示例:
以下是用伪代码实现 BFS 的示例:
BFS(G, s):
# 初始化 visited 和 queue
所有节点 v 标记为未访问
将 s 标记为已访问
将 s 放入队列 Q
while Q 不为空:
# 从队列中取出下一个节点 t
t = Q.pop()
# 遍历与 t 相邻的节点 v
for v in t 的相邻节点:
# 如果节点 v 未被访问,则将它标记为已访问
# 并将它添加到队列中,以便进行后续遍历
if v 未被访问:
将 v 标记为已访问
将 v 放入队列 Q
下面是一个 Python 代码示例,用于演示如何实现 BFS 并解决图问题:
from collections import defaultdict, deque
def bfs(graph, start):
visited = set()
queue = deque([start])
visited.add(start)
while queue:
node = queue.popleft()
print(node)
for neighbor in graph[node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
# example graph
graph = defaultdict(list)
graph["A"] = ["B", "C"]
graph["B"] = ["D", "E"]
graph["C"] = ["F"]
graph["D"] = []
graph["E"] = ["F"]
graph["F"] = []
# run bfs
bfs(graph, "A")
输出:
A
B
C
D
E
F
在此示例中,我们将从节点 "A" 开始遍历图。
首先,我们将 "A" 添加到 visited 集合和队列中。
然后,我们从队列中弹出节点 "A" 并处理这个节点。我们还将节点 "B" 和 "C" 添加到队列中。
接下来,我们从队列中弹出节点 "B" 并处理这个节点。我们还将节点 "D" 和 "E" 添加到队列中。
然后我们从队列中弹出节点 "C" 并处理这个节点。我们还将节点 "F" 添加到队列中。
继续这个过程,直到队列为空。由于我们距离 "A" 更近的节点先被访问,因此 BFS 在遍历节点时按照距离递增的顺序进行。