广度优先搜索

BFS 从源顶点出发,使用队列逐层向外扩展,在无权图中找到从源点到所有可达顶点的最短路径(以边数计),时间复杂度

定义

广度优先搜索(BFS)

给定图 和源顶点 ,BFS 系统地探索 的边以发现从 可达的所有顶点。算法使用队列(FIFO)管理待探索顶点,通过颜色标记(WHITE/GRAY/BLACK)、距离 前驱 三个属性记录搜索状态。

BFS 顶点属性

  • :WHITE(未发现)、GRAY(已发现,在队列中)、BLACK(已完成探索)
  • :从源点 的最短路径距离(边数)
  • :BFS 树中 的前驱(父节点)

核心性质

性质描述
队列性质队列中顶点按 值非递减排列,队首与队尾 值之差不超过 1
最短路径对每个从 可达的顶点
前驱子图 是一棵以 为根的 BFS 树,包含所有可达顶点
时间复杂度邻接表 ,邻接矩阵
值不变性 入队时设置一次,此后不再改变

关系网络

graph LR
    A["广度优先搜索"] --> B["队列"]
    A --> C["图的表示"]
    A --> D["Dijkstra算法<br/>(边权全为1的特例)"]
    A --> E["拓扑排序"]
    A --> F["二部图判定"]

章节扩展

第20章:基本图算法

算法流程: 初始化所有顶点为 WHITE,源点 设为 GRAY、、入队。循环取出队首顶点 ,标记为 BLACK,遍历 中每个 WHITE 邻居 ,设置 ,将 入队。

引理 22.3(队列性质): 队列中顶点按 值非递减排列。证明通过对主循环迭代次数归纳——出队 后新入队的 WHITE 邻居 值为 ,不小于队尾的 值。

定理 22.4(最短路径): BFS 执行后,对每个从 可达的顶点 。证明对 归纳——取最短路径上前驱 ,由归纳假设 ,当 出队时松弛 使

推论 22.5(BFS 树): 前驱子图 是一棵以 为根的树, 中从 的唯一简单路径就是 中的一条最短路径。证明利用 值严格递减保证连通性,反证 值求和矛盾保证无环性。

补充

BFS 与 Dijkstra 的关系

BFS 是 Dijkstra 算法在所有边权重相等(如全为 1)时的特例。此时 Dijkstra 的优先队列退化为 FIFO 队列,两者行为完全一致。

参见