🐵指尖猴全新升级
第17课:深度优先搜索DFS
🧭

深度优先搜索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课完成!继续探索下一课吧 🚀