DFS的主要思想
DFS深度优先搜索通过不断递归向后深入,当出现当前情况不满足条件或不是最优情况时回到上一步继续向后递归,最终遍历所有元素。
DFS的实现
DFS主要通过递归来实现,即
1.递归的定义 创建DFS函数
2.递归的拆解 通常在一个for循环中 进行条件判断 元素的添加 DFS递归 元素的删除
3.递归的出口 即当已找到符合条件的组合 进行回溯
DFS的应用
以上题目已用java实现
总结
DFS由于会对每个元素的每种可能都进行递归遍历,所以通常用来找所有可能的方案与组合,少数情况用于找最优解(通常为动态规划)。在数字组合问题中,由于DFS会取所有满足条件的组合,当出现重复数字时,会出现重复组合,这时就要进行条件判断,即只能优先取前面的重复数字。在一些问题中对组合的划分可以用切割来解决,即找到所有的切割方案,同样是利用DFS去遍历所有可能。DFS在一些问题中,单独无法进行对当前组合是否为最优的判断,可能需要结合BFS去解决问题,即先用BFS遍历为图中每个元素设置一个变量,在DFS中通过对变量的比较判断是否进行了最优的组合。一些问题可以将其看成图,然后通过DFS来解决。