深度优先搜索(DFS)和广度优先搜索(BFS)

实际使用中,DFS远多于BFS。
如果只是为了遍历所有结点的话,那么DFS和BFS没什么差别,我们当然更倾向于更方便编写、空间复杂度更低的DFS遍历。

BFS应用场景:
1.求最短路径(遇到的第一个解,一定就是最优解)

DFS应用场景:
1.迷宫问题(判断能否从A点走到B点这种问题)


DFS搜索策略:从某个节点,沿着任一分支尽可能地搜索,直到最后一个节点
递归实现-如果层级过深,会导致栈溢出
遍历顺序:A|B|D|E|C

栈实现-先进后出
入栈顺序:A|BC|DE
出栈顺序:A|CB|ED

 

BFS搜索策略:逐层搜索,遍历下一层级的所有子节点
队列实现-先进先出
入队列顺序:A|BC|DE
出队列顺序:A|B|C|D|E


 框架

复制代码
// DFS递归实现
dfs(节点)
{
    // 遍历当前节点的子节点
    {
        // 满足访问条件
        {
            // 标记子节点已访问
            // dfs(子节点)
            // 回溯清除标记
        }
    }
}
int main()
{
    // 遍历可能的首节点
    {
        // 满足访问条件
        {
            // 标记初首节点已访问
            // dfs(首节点)
            // 回溯清除标记
        }
    }
}

// DFS栈实现
dfs(节点)
{
    // 当前节点入栈
    // 标记当前节点已访问
    while(栈不为空)
    {
        // 出栈
        // 遍历出栈节点的子节点
        {
            // 子节点入栈
            // 标记子节点已访问
        }
    }
}
复制代码
复制代码
// BFS队列实现
bfs(节点)
{
    // 当前节点入队列
    // 标记当前节点已访问
    while(对列不为空)
    {
        // 出队列
        // 遍历出队列节点下一层级的所有子节点
        {
            // 子节点入队列
            // 标记子节点已访问
        }
    
    }
}
复制代码

 

 
 
posted @   jason8826  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2023-04-24 python:excel文件转csv
点击右上角即可分享
微信分享提示