📜  python 3 中的 bfs - Python (1)

📅  最后修改于: 2023-12-03 15:04:03.836000             🧑  作者: Mango

Python 3 中的 BFS

BFS(广度优先搜索)是一种遍历或搜索树或图的算法,其主要思想是从根节点开始,逐层向下遍历每个节点,直到找到所需节点。下面是 Python 3 中 BFS 的实现。

实现步骤
  1. 首先将根节点入队。
  2. 当队列不为空时,执行以下操作:
    • 从队列中取出一个节点。
    • 访问该节点。
    • 将该节点的未访问过的子节点入队。
  3. 重复步骤 2 直到队列为空。
代码示例
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 更适用于寻找最短路径等问题,因为它可以保证优先访问更接近根节点的节点。在实际应用中,我们需要根据问题的具体特点来选择适当的算法。