卸载大脑,相信DFS

切莫相信动规,吾将为您指明前进之路

印子

比赛时,你是否有这样的经历:不敢用for暴搜,又不会用数学公式推理;焦急地在纸上打草,却没有优化思路;明明比赛前一天晚上背了那么多模板却脑子一片空白……我想,你应该很绝望吧
嘿,DFS来辣!

简介

DFS(深度优先搜索(Depth First Search),爱称为示范性快速搜索(Demonstration Fast Search)或大法师),是一种能够将所有可能情况全都遍历一遍的算法

进一步了解

相比于for暴搜,他多了一些成熟与稳重,愿意在赛场上助你一臂之力
作为搜索算法,他的原理是通过将大问题分解为众多子问题,他的基础是函数递归
著名的金牌教练刘曾这么说
“DFS是初学者学习暴力法的第一个障碍,学习时间断则数天,长则数月甚至一年以上”
对于众多初学者来说,为什么不能快速理解DFS?那是因为函数的递归与回溯确实比较难理解,但当你对其理解透彻时,你将会觉得DFS是如此美妙

模板

void dfs(...){
	if(i==n) { ...return; }
	for(int j=1;j<=n;j++) if(!vis[j]) vis[j]=1,dfs(...),vis[j]=0;//回溯
}

在打DFS时一般都会用这个模板,不过不能拘泥于这一种形态

例题

最经典的DFS题,莫过于八皇后问题和全排列问题
在这里插入图片描述
在这里插入图片描述

若读者对DFS感兴趣的话,一定要试试这两道题,当彻底地理解这道题后,你就已经迈进了DFS的门槛

题外

DFS的一个重要帮手就是记忆化搜索——一个可以帮助DFS比肩动态规划的优化方法
如何打记忆化搜索呢?首先,要将void类型的dfs转成有返回值类型的函数,然后在将每一次的返回值存到数组中,若这层已经被搜过,就直接返回结果,可以大大提高运行效率,由于其便于使用,又效率高,笔者十分推荐

DFS的赞歌

若您感到迷茫,请不要慌张,请不要害怕
因为DFS将为您拨开迷雾,指引您前进
就算荆棘遍地,DFS也能为您横扫一切
无所畏惧,众生平等!
我DFS教虔诚的信徒们啊,切莫相信动规,我DFS将为您指明前进的道路!!
我DFS永垂不朽!!!!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值