【学习笔记】JU1-1A DFS

< 搜索 >  DFS 深度优先搜索及回溯法:

基本思想:在决策树上先遍历到最深处,再回溯到子节点的父节点上,再向下搜索第二个子节点;

      每到最低端,判断条件,增减答案;或在每一个节点都判断是否满足题意,若不符合,即其所有子节点都不满足题目条件,可以放弃对其所有子节点的搜索,直接回溯,或是放弃递归。

实现:DFS基本都使用递归完成。(见下例)

 1 void dfs(int k)//k 表示当前运行递归的层数
 2 {
 3     if("递归到了树的最低端"){
 4         //进行处理(判断是否合法/添加答案)   
 5         return;//到头了,回溯                          
 6     }
 7     for("枚举:此空的方案数"){//或是直接手写
 8         //记录现场/记录此空(视情况)
 9         if("合法")//或不用判断
10             dfs(k + 1);//递归下一个子节点的情况
11         //恢复现场/取消此空(视情况)
12     }
13 } 

优点:代码少,思路简单,便于剪枝。

缺点:很难寻找最优解。

适用于:暴力枚举所有种情况,求情况总数中。

 

posted @ 2021-02-17 19:21  anjack_511  阅读(48)  评论(0编辑  收藏  举报