Developer Toolbox

广度优先搜索(BFS)

一层一层地探索图。由队列决定下一个顶点,所以总是先访问离起点最近的顶点。

  • O(V + E)
  • 内存 O(V)
  • 队列
本页的其他术语
  • 顶点:图中的一个点,这里画成带字母的圆圈。
  • 边:连接两个顶点的线。这里两个方向都能走。
  • 邻居:通过一条边与某个顶点相连的顶点。按字母顺序查看。
0 / 60 步
  • 在队列中
  • 当前
  • 已完成
  • 搜索树的边
  • 跳过的边

从 A 开始。点击播放,或一步一步查看搜索过程。

空格键:播放或暂停。左右方向键:单步移动。Home 和 End 键:跳转。

试试看: 选择分成两部分的图。没有和起点连通的顶点永远到达不了。

工作原理

BFS 先把起点放进队列。然后反复取出队列最前面的顶点,把它的新邻居加到队列末尾。队列按到达顺序处理,所以距离一条边的顶点全部完成后,才轮到距离两条边的顶点。顶点旁边的数字是它到起点的距离:到达它最少需要几条边。

适用场合

需要按步数算的最短路径时,用 BFS:谜题的最少步数、网络中的最少跳数、和你相隔不超过两层关系的人。在大图上队列可能很长,因为它一次要装下整整一层。