AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

DFS 简要

作者: 作者的头像   Charles__ ,  2019-10-23 16:02:58 ,  所有人可见 ,  阅读 2241


17


22

dfs的过程

以有向图的深搜来理一理深搜的一些概念。

dfs1.gif

注:图中灰色的边表示这条边指向的点之前已经被访问了。

注: 深搜不仅适用于图,深搜又叫暴搜(其实就是穷举)。

奇妙的是,每个深搜的过程,都会对应一颗搜索树,上面那个图对应的搜索树是这样的:

dfs2.gif

怎么思考dfs

image.png

思考深搜要注意三个地方

  • “顺序”:就是要找一种搜索顺序,能把各种情况都枚举出来(想想上面说到的搜索树,每一步对应一个节点以及其延伸出的子树)。
  • “回溯” :回溯说白了就是在一个dfs内,结束了调用的dfs,回到原来的进程。回溯回到原来的进程后,一般都要“恢复现场” 。记住 , 一但你从一个深搜出来 , 就马上恢复现场,就像事情没发生过一样。当然,不一定所有题目都要恢复现场。(深搜无模板,看题目而定)
  • “剪枝”:剪枝就是把不必要的搜索进程砍掉(emmm,这就很抽象了,视题目而定)

c++模板

写深搜一般是这样思路:

reference:论执着与稳重的好处----DFS/BFS

dfs()//参数用来表示状态  
{  
    if(到达终点状态)  
    {  
        ...//根据题意添加  
        return;  
    }  
    if(越界或者是不合法状态)  
        return;  
    if(特殊状态)//剪枝
        return ;
    for(扩展方式)  
    {  
        if(扩展方式所达到状态合法)  
        {  
            修改操作;//根据题意来添加  
            标记;  
            dfs();  
            (还原标记);  
            //是否还原标记根据题意  
            //如果加上(还原标记)就是 回溯法  
        }  

    }  
}
//大佬所言:就像你去学习一个混合运算,你要必须学习加法思想,然后减法,再是乘除。

Post modified: 2019-10-24

8 评论


用户头像
jasonlin   2020-06-17 16:59      1    踩      回复

很棒!!!!!!给手给手~~


用户头像
等等__   2022-02-25 10:38         踩      回复

为啥图片看不了了


用户头像
Moon_light   2019-11-15 11:15         踩      回复

👍


用户头像
Tie   2019-10-24 01:04         踩      回复

很赞!


用户头像
温酒论本心   2019-10-23 21:18         踩      回复

赞一个


用户头像
ChinaPie   2019-10-23 16:11         踩      回复

赞一个!


用户头像
巍萌先生   2019-10-23 16:08         踩      回复

赞!动态图

用户头像
Charles__   2019-10-23 16:52         踩      回复

https://visualgo.net/en
算法可视化网站


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息