📅  最后修改于: 2023-12-03 15:04:03.836000             🧑  作者: Mango
BFS(广度优先搜索)是一种遍历或搜索树或图的算法,其主要思想是从根节点开始,逐层向下遍历每个节点,直到找到所需节点。下面是 Python 3 中 BFS 的实现。
from queue import Queue
def bfs(root):
q = Queue()
q.put(root)
visited = set()
visited.add(root)
while not q.empty():
node = q.get()
print(node)
for child in node.children:
if child not in visited:
visited.add(child)
q.put(child)
以上代码中,root
是根节点,node.children
是节点的子节点列表。在 BFS 中,我们使用队列来实现节点的遍历。每当我们从队列中取出一个节点,我们就访问该节点,并将其所有未访问过的子节点入队。
BFS 的时间复杂度为 $O(|V| + |E|)$,其中 $|V|$ 是节点数,$|E|$ 是边数。BFS 遍历整个图需要访问每个节点和每条边至少一次,因此时间复杂度为 $O(|V| + |E|)$。
BFS 的空间复杂度为 $O(|V|)$,其中 $|V|$ 是节点数。在最坏情况下,BFS 需要存储所有节点才能完成遍历,因此空间复杂度为 $O(|V|)$。
BFS 是一种简单而有效的遍历和搜索树和图的算法。与 DFS 相比,BFS 更适用于寻找最短路径等问题,因为它可以保证优先访问更接近根节点的节点。在实际应用中,我们需要根据问题的具体特点来选择适当的算法。