Skip to content

2016年 408 数据结构 第 6 题

数据结构2016年选择题2分

题目

下列选项中,不是下图深度优先搜索序列的是( )。

V1V2V3V4V5

错因

A

可能漏看了 这条出边,以为 只能去 ,于是觉得序列开头""不合法。其实 有三条出边(指向 ),邻接表把 排在最前面,DFS 第一步就走 。后续 无出边回溯到 也无未访问出边再回溯到 、最后从 访问 ——每一步都合法。

B

可能误以为 DFS 必须按字母(编号)小的邻居优先,认为 第一步必须是 ,""开头就违法。但 DFS 算法对邻居顺序不强制——同一张图,不同的邻接表存储顺序会得到不同序列,都属于合法 DFS。 每步沿真实出边走,序列合法。

C

可能卡在""这步觉得跳得太远——中间隔着 三层回溯,怀疑 DFS 不允许"跨这么多层"。但 DFS 的回溯深度不限 无出边回溯到 仅有的出边 已走过再回溯到 也已走过继续回溯到 ,此时 还有 未访问就访问 。每一步回溯都符合"当前顶点无未访问出边"的条件,序列合法。

总解析

先把图的出边整理出来

顶点出边目标
(无)

DFS 判断准则

  • 关键规则:当访问到顶点 、且 还有未访问的出边邻居时,下一步必须深入 的某个未访问邻居(不能回溯)。只有 所有出边邻居都访问过了,才允许回溯到上一层
  • 邻居之间的选择顺序由邻接表决定,任何顺序都合法
  • 回溯可以连续多层——只要每层都满足"无未访问出边"条件。

逐项验证

  • A(V1, V5, V4, V3, V2):(回溯到 唯一出边 已走,再回溯到 。✓
  • B(V1, V3, V2, V5, V4):。每步都沿真实出边,最后 无出边,回溯收工。✓
  • C(V1, V2, V5, V4, V3):(连续回溯 。✓
  • D(V1, V2, V3, V4, V5): 后,问题来了—— 的出边邻居是 ,且 此时未访问。按 DFS 规则,必须从 深入 ,不能"跳回 再访问 "。所以序列第三个不可能是 ,只可能是 。✗

反推 D 不合法的核心:DFS 不允许"还有未走完的支路就先回溯"。 之间没有出边,要从 走到 ,必须经过回溯到 ,但回溯的前提是 已无未访问出边邻居,而 还在等着——条件不满足。

最终答案是 D

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数