DFS(深度优先搜索)

1.什么是DFS ?
DFS,即深度优先搜索

传统枚举中需要固定 for 循环的层数,但是这会造成程序非常冗长,而且不能随意增减枚举层数。所以我们使用一种新的利用函数递归枚举的方式,枚举每一个填空中所有可能的选项,然后判断这种选项是否合法。如果这个选项合法的话就填写下一个选项,然后继续;如果这个填空中所有的选项都不合法,那就不用继续枚举下去了,而是去尝试更换上一个填空的选项,继续枚举。这种方式称为回溯算法,常使用深度优先搜索来实现。

通俗的讲:所谓的DFS就是一条路走到底,直到无路可走的情况下,才会选择回头,然后重新选择一条路。

2.DFS 的常规模板

void dfs(int k) // k表示递归层数,或者说是要填第几个空。
{
    if(所有空已经填完)
    {
        判断最优解/记录答案;
        return;
    }
    
    for(枚举这个空能填的选项)
        if(这个选项是合法的)
        {
            记录这个空(保存现场);
            dfs(k+1);
            取消这个空(恢复现场)
        }
}



总结
搜索算法也是一种暴力枚举策略,但是其算法特性决定了效率比直接的枚举所有答案要高,因为搜索可以跳过一些无效状态,降低问题规模。在比赛中,如果无法找到一种高效求解的方法(如贪心、递推、动态规划、公式推导等),使用搜索也可以解决一些规模较小的情况;而有的任务就是必须使用搜索来完成,因此这是相当重要的策略。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值