图的 BFS 与 DFS动画演示

一圈圈铺开还是一条路走到底,队列与栈的两种性格。

键盘:← → 单步 ·空格 播放/暂停 · R 重置 ·Home/End 到两端

图的遍历是「把图拆开重走一遍」的功夫:BFS 用队列按跳数一圈圈铺开,先被摸到的点离起点就最近;DFS 用栈(或递归)见新点就往深处扎,撞了墙才回头。这一页在无向样本、有向含环、多连通分量三张图上各跑两种走法,边按三种颜色管理:绿色树边、蓝色正在考察、灰色通向已访问点的边,前沿队列或递归栈始终摆在旁边同步呼吸。

几个容易被讲糊的点,页面里都会撞见:BFS 的「已访问」在入队那一刻就要盖章,否则同一个点被三个邻居先后排队;非连通图需要外层再扫一遍白点、逐分量各起一轮,disconnected 样本就是专门练这个的;DFS 指向「还在递归栈上」的灰点就是回边,有回边必有环,无向样本里三角形与自环都逃不掉,这也是判环的标准姿势。

图的 BFS 与 DFS演示怎么用

  • 切两种走法:顶部按钮换 BFS 与 DFS,换图按钮提供无向连通、有向含环、多连通分量三张样本。
  • 认三色边:绿线是生成树的树边,蓝线表示此刻正在考察,灰线是通向已访问或已完结节点的边,遍历结束时图上三色分明,树边正好铺出一片生成森林。
  • 读辅助格:BFS 档看队列,最左一格虚线框是队首;DFS 档看递归栈,顶格是当前帧,出栈即涂黑结算。
  • 找环:DFS 档每遇到一条指向灰点的回边都有 note 点名报数,跑完能直接回答「这图有没有环」。

常见问题

BFS 和 DFS 各自适合什么问题?

BFS 天生算「最少跳数」:无权图最短路、按层扩散、社交网络一度二度关系都是它。DFS 擅长拓扑与环:判环、找连通分量、强连通分量、回溯剪枝与迷宫探索。两种性格没有谁淘汰谁,队列与栈的差别而已。

为什么无向图遍历时反复看到「反向的来路边」?

无向边在邻接表里挂两遍,从孩子视角再碰到父亲是必然的。页面把它单独染灰并注明「来路」,是为了跟真正的回边区分开:环的判定标准是「指向当前栈上灰点的非来路边」,混为一谈会误报。

遍历顺序唯一吗?

不唯一:起点选择、邻接表内邻居的排列都会换出另一条合法序列。本页把顺序固定下来(样本图、按边表建邻接、外层按节点表扫),动画、说明与参考实现三方对得上,方便逐格核对。

演示编号 C06无需安装,手机端同样可用按 Ctrl + K 搜工具与演示