回溯与图论高频

共 22 题
#

1. 全排列(含重复元素去重)的回溯模板中 used 数组与同层剪枝的原理?

A used 数组标记跨层已选,同层剪枝(i>0 且 nums[i]==nums[i-1] 且 !used[i-1])去重 ✓ 正确答案
B 同层剪枝需要 used[i-1]==1
C 去重无需排序
D used 数组即可完成去重,无需同层剪枝
#

2. 组合总和系列(可重复选/不可重复/固定个数)的剪枝与去重差异?

A 去重无需排序
B 可重复选 start=i+1
C 可重复选 start=i,不可重复 start=i+1 并同层去重,固定个数加长度限制 ✓ 正确答案
D 三种情况完全一样
#

3. Dijkstra 算法的堆优化实现中为什么不能处理负权边?与 Bellman-Ford/SPFA 的适用边界?

A Dijkstra 可处理负权
B 贪心选定依赖非负权,负权会破坏已定节点,故须用 Bellman-Ford/SPFA ✓ 正确答案
C Dijkstra 无需优先队列
D Bellman-Ford 无法检测负环
#

4. 回溯算法的模板中路径-选择-约束(choose/explore/unchoose)三要素,剪枝如何加速?

A 剪枝会增加搜索空间
B 回溯无需撤销选择
C 三要素是路径/选择/约束,剪枝在 explore 前排除无效分支 ✓ 正确答案
D 回溯是 BFS
#

5. 无向图的割点与桥(Tarjan)中 low 与 dfn 数组如何判定割点或桥,根节点为何要特判?

A 割点看 low[v]>dfn[u]
B 割点看 low[v]>=dfn[u],桥看 low[v]>dfn[u],根节点用孩子数特判 ✓ 正确答案
C 桥看 low[v]>=dfn[u]
D 根节点无需特判
#

6. 最小生成树 Kruskal(并查集)与 Prim(堆)的复杂度对比及稠密/稀疏图选型?

A Kruskal 排序边+并查集 O(E log E),Prim 堆 O(E log V),稀疏图用 Kruskal、稠密图用 Prim ✓ 正确答案
B 稀疏图用 Prim
C 稠密图用 Kruskal
D 两者复杂度完全相同
#

7. 全排列/组合/子集的去重中 used 数组与排序后跳过相邻重复值的写法?

A 全排列去重无需排序
B 全排列用 used+同层剪枝,组合/子集用 start+跳过相邻重复,都需排序 ✓ 正确答案
C 组合去重用 used 数组
D 子集去重看 i>0
#

8. 单词搜索(矩阵 DFS + 回溯标记)的原地标记与恢复技巧?

A 标记后无需恢复
B 用特殊字符原地标记访问中,DFS 返回后恢复,避免额外 visited 空间 ✓ 正确答案
C 需要独立 visited 数组
D 标记在返回后设置
#

9. 图的遍历中 BFS 求最短路径与 DFS 求连通分量的应用?

A BFS 求连通分量
B BFS 按层扩展求最短路,DFS 深度优先求连通分量 ✓ 正确答案
C DFS 求最短路
D 两者都无法求连通分量
#

10. 电话号码的字母组合(LeetCode 17)中回溯模板如何按 digits 逐位展开,与组合问题“选择列表动态生成”的差异?

A 与组合问题选择列表完全相同
B 选择列表是全局固定候选集
C 每层可以不选字母
D 按 digits 逐位推进,每层选择列表由当前数字映射决定 ✓ 正确答案
#

11. N 皇后问题中按行回溯 + 列/两对角线占用标记的实现要点?

A 按行回溯,用列、主对角线(i-c)、副对角线(i+c)标记冲突 ✓ 正确答案
B 只标记列即可
C 主对角线用 i+c 标记
D 无需撤销
#

12. 括号生成与复原 IP 地址中约束传播式剪枝如何减少无效分支?

A IP 段可超 255
B 先生成全部再过滤
C 括号生成可让右括号超过左括号
D 用约束传播式剪枝,每步只扩展合法前缀,剪掉无效分支 ✓ 正确答案
#

13. 欧拉路径与回路(Hierholzer 算法)中用栈逆序输出,奇度顶点数量如何决定路径是否存在?

A 无需删边
B 奇度顶点任意数量都存在
C 回路由 2 个奇度顶点构成
D 无向图恰 0 或 2 个奇度顶点才存在,Hierholzer 用删边+栈逆序输出 ✓ 正确答案
#

14. 单词接龙(LeetCode 127)中如何把词转换建模为无权图 BFS,双向 BFS 为何能把搜索空间从 b^d 降到 b^(d/2)?

A 单向 BFS 空间更小
B 双向 BFS 每层扩展两端
C 建模为无权图 BFS,双向 BFS 两端各扩 d/2 层,空间从 b^d 降到 b^(d/2) ✓ 正确答案
D 双向 BFS 空间为 b^d
#

15. 二分图判定与最大匹配中染色法 DFS 与匈牙利算法的原理?

A 二分图必有奇环
B 染色法判定的偶环
C 匈牙利算法用贪心
D 染色法 DFS 二染色判定(无奇环),匈牙利算法用增广路求最大匹配 ✓ 正确答案
#

16. 最短路径的选型中 Dijkstra 堆优化、SPFA 的适用边界与负权环检测?

A 非负权用 Dijkstra,负权用 SPFA/Bellman-Ford,SPFA 用入队次数超 V 检测负环 ✓ 正确答案
B Dijkstra 可处理负权
C SPFA 无法检测负环
D 负权环也有最短路
#

17. CLRS 第 25 章所有节点对最短路径的 Johnson 算法 vs Floyd-Warshall 的工程取舍?

A Floyd 无法处理负权
B Johnson 适合稠密图
C Floyd-Warshall O(V³) 适合稠密图,Johnson 重标定+多次 Dijkstra O(VE log V) 适合稀疏图 ✓ 正确答案
D Johnson 无法处理负权
#

18. 子集(LeetCode 78)与组合(LeetCode 77)中“选或不选”与“start 索引”两种回溯写法的等价性?

A start 索引写法不支持去重
B 两种写法生成不同集合
C "选或不选"无法生成子集
D "选或不选"是位决策视角,"start 索引"是组合枚举视角,两者生成相同集合 ✓ 正确答案
#

19. 腐烂的橘子(LeetCode 994)中多源 BFS 如何按层记录分钟数,最后如何检查是否还有新鲜橘子?

A 分钟数从第 1 分钟开始
B 单源 BFS 即可
C 多源 BFS 所有腐烂同时入队按层扩展,层数即分钟数,最后检查新鲜橘子决定是否 -1 ✓ 正确答案
D 有新鲜橘子未感染也返回 minutes
#

20. 单词搜索 II(LeetCode 212)中 Trie + 回溯如何共享前缀剪枝,与单词搜索(79)单次 DFS 的差异?

A Trie 无法共享前缀
B 每个单词单独 DFS 即可
C 用 Trie 存储所有单词,DFS 共享前缀剪枝,一次遍历匹配所有单词 ✓ 正确答案
D 找到单词后无需处理
#

21. DLX 在 dancing links X 算法的双向十字链表工程实现。

A 用双向十字链表实现删除/恢复 O(1),回溯时逆序恢复 ✓ 正确答案
B 单向链表即可
C 删除后无法恢复
D DLX 只解决最长路径
#

22. Dancing Links(DLX)精确覆盖在数独、N 皇后、集合覆盖的工程实现。

A 把约束建模为列、候选解为行,用 DLX 选行使每列恰好覆盖一次 ✓ 正确答案
B 数独无需建模约束列
C DLX 只适用集合覆盖
D 皇后问题无需对角约束