学习首页/图算法/广度优先遍历交互演示 · JavaScript

代码与动画 BREADTH-FIRST SEARCH

广度优先遍历.

使用队列逐层访问图节点,并在入队时标记已发现节点。

时间 O(V + E)空间 O(V)无向图 · 邻接表

原理与执行逻辑

从起点向外逐层访问节点,用先进先出的队列保存已发现但尚未扩展的节点。同一层处理完成后,才会扩展下一层。

执行步骤

  1. 标记起点并入队。
  2. 取出队首,将它加入访问输出。
  3. 检查邻接节点,将尚未发现者立即标记并入队。
  4. 重复至队列为空。

关键理解

节点在入队时标记,避免环和多个前驱造成重复入队。无权图中首次发现节点时,其层数就是到起点的最少边数。

简短示例

A 连接 B、C,B 连接 D。按字母访问邻居时,队列由 [A] 变为 [B, C],最终访问顺序为 A、B、C、D。

代码与执行动画

STEP 0 / 22
广度优先遍历
function bfs(graph, start) {  const seen = new Set([start]);  const queue = [start], result = [];  let head = 0;  while (head < queue.length) {    const node = queue[head++];    result.push(node);    for (const next of graph.get(node)) {      if (seen.has(next)) continue;      seen.add(next);      queue.push(next);    }  }  return result;}
15 行 · 0 个片段标记
起点 A已发现 0队列: 空
A起点BCDEF
当前数据正在操作已访问 / 命中标记 / 指针
0

准备遍历

从指定起点开始,未连通的节点保持未访问状态。

配置图

修改边列表可添加或删除连接,支持不连通图。

例如 A-B, B-C;重复边会合并,空列表表示没有边。

实现说明

广度优先遍历的操作规则

邻接节点按字母顺序访问。只遍历起点所在连通分量;发现时即标记,避免环和重复入队。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。