第17课:深度优先搜索DFS
进度 0/24
🧭
深度优先搜索DFS
一条路走到黑,不行就回头换路!
📖知识引入
🧭DFS思想
能往前就往前走,走不动了就回溯,换条路继续
🔁递归实现
函数调用自己去探索下一个点,代码短到离谱
✅visited标记
走过的点打上标记,防止绕圈走进死循环
🌲天生一对
树的前中后序遍历,其实就是图上最简单的DFS
💡
DFS写错的头号原因是忘打visited标记——记住口诀:先标记,再递归
🔍图上的DFS
bool vis[N]; // 标记点是否走过
void dfs(int u) {
vis[u] = true; // 先标记,防止回头
cout << "访问 " << u << endl;
for (int v : g[u]) // 依次尝试每个邻居
if (!vis[v]) dfs(v); // 没走过就一头扎进去
}访问一个点先打标记,再递归探索没走过的邻居。
🎯小测验
第1题:DFS的核心策略是?
第2题:防止DFS绕圈死循环用什么?
第3题:DFS最自然的实现方式是?
📝本课知识点
- ✓DFS=深入+回溯
- ✓先标记再递归
- ✓递归实现最自然
第17课完成!继续探索下一课吧 🚀
