本讲对应视频《CSP复赛专题14-搜索1(DFS)》(24′01″)。讲解 DFS 的本质(一条路走到黑、再回溯;DFS=递归;回溯是递归返回的副产品), 通过迷宫出口、连通块统计、全排列三道例题建立"写 DFS 四步法"的手感,再用填涂颜色(反向搜索)与组合的输出(双参数 DFS)两道拓展体会"换角度"与"天然去重"。
学情上的典型困难:① 把回溯当成额外技巧,忘了写 取消标记 → 只走一条路、漏解;
② 不会判断 vis 该永久还是临时(迷宫可达性可永久,排列/组合必须临时);
③ 搞不清"全排列要所有顺序、组合只要一种顺序",导致组合重复;④ 输出格式(%5d / %3d 场宽)写错。
① DFS 四步法;② 回溯=取消标记; ③ 迷宫/连通块的 vis 判否;④ 全排列的"盒子放数字"模板;⑤ 组合双参数 DFS 递增去重。
① vis 永久还是临时;② 填涂颜色为什么要"反向搜索";
③ 组合为什么必须限制 i 从 x 起;④ 输出场宽格式。
| 环节 | 时间 | 教师活动 | 学生活动 | 设计意图 |
|---|---|---|---|---|
| ① 本质与方法 | 6′ | 第 2–3 页:讲"走到黑/回溯",带出四步法;追问"回溯是不是额外技巧" | 口头回答:回溯=递归返回 | 建立本质认知 |
| ② 例题1 迷宫 | 8′ | 第 4–5 页动画①:点「下一步」让学生先猜下一格,再揭示"为什么往回走" | 预测方向,看递归栈变化 | DFS 栈可视化 |
| ③ 回溯现场 | 4′ | 第 6 页动画②:盯 (0,1) 死路,讲 vis 永久标记 | 说"为什么标记/为什么往回走" | 区分永久/临时标记 |
| ④ 例题2 连通块 | 6′ | 第 7–8 页动画③:看逐块染色与实时块数 | 数块数,说为什么从"未访问黑格"启动 | 多起点启动 |
| ⑤ 代码走读 | 5′ | 第 9 页:迷宫+连通块代码,强调先写判否再递归 | 跟读三段判否 | 固化框架 |
| ⑥ 例题3 全排列 | 7′ | 第 10–11 页:动画④盒子放数字 + 代码,停在使用 %5d |
看 used 数组与回溯取回 | 状态标记模板 |
| ⑦ 拓展填色 | 5′ | 第 12 页动画⑤:反向搜索,讲"求补集" | 预测哪些 0 变 2 | 换角度 |
| ⑧ 拓展组合 | 3′ | 第 13 页动画⑥:双参数 DFS,讲递增去重 | 解释为什么不会重复 | 天然去重 |
| ⑨ 检测 | 1′ | 第 14–15 页三道检测 | 完成测评 | 形成性评价 |
问:既然 BFS 也能搜迷宫,为什么讲 DFS?
答:本专题是搜索(一),先建立"递归=DFS=回溯"这一最通用的心智模型,它适用于所有方案枚举(排列/组合/连通块)。
迷宫只问可达性,DFS/BFS 都行;但全排列、组合这类"列出所有方案"的题只能用 DFS。先讲 DFS 是为了覆盖更广。