目录
前言:
大家好呀,我是山上雪,时隔多日终于回归,归功于小姑娘的打赏激励以及佬们日更一篇的节奏使得我坐不住了!!
激动万分的写下了该篇博客,文有不足,望各位大佬批评指正
动力源泉如下!!!!!!!!!
1.背景
深度优先算法(Depth First Search,简称DFS):本文均采用递归方式,搜索每一条路径,一路走到黑直到不能再走则返回,每个结点仅访问一次。
2.图解分析
对于这个图
我们想到 7这个地方的话怎么走呢?1是起点,有5条可能的路径
1-2-5
1-2-6
1-3-7(成功)
1-3-8
1-4
可以看出,想要到7则需要遍历所有可能路径,如果加一条件,找到则退出是可以减少计算量的
3.算法思想
dfs中最重要的算法思想是回溯和剪枝。
回溯就是当你面对多条路的时候,你优先选择一条路后,当你选择多条路的另一条路的时候你需要回到初始状态,也就是说,这条路走不通你就退回,然后选择下一条路,满足回溯条件的某个状态的点称为“回溯点”。
剪枝,因为dfs算法用的递归实现,这时候就可能产生了许多不必要的计算过程,而这些计算过程通常很大。所以我们就可以加一个限制条件,使其不用计算直接返回,这种思想就像是剪掉了树的枝条,所以称为“剪枝”。
4.dfs四大例题
4.1.递归实现指数型枚举
从 1∼n这 n 个整数中随机选取任意多个,输出所有可能的选择方案。
输入格式
输入一个整数 n。
输出格式
每行输出一种方案。
同一行内的数必须升序排列,相邻两个数用恰好 1个空格隔开。
对于没有选任何数的