DFS(深度优先搜索)

DFS(深度优先搜索)

1. 什么是 DFS ?

DFS,即深度优先搜索

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

2. DFS 的搜索顺序

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

在这里插入图片描述

利用 DFS 进行遍历的结果为: 7 1 9 0 5 31 2 0 20 3 25 33

3. DFS 的常规模板

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

总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值