递归,DFS,回溯的总结

逐步生成类型的递归题型:

  逐步生成类型的题,一般都是求n的解,然后n的解可以通过(n-1 )的解推出,(n-1)的解又可以通过(n-2)的解推出,以此类推直到找到一个现在已知的解(一般是n=1时),就可以推出n的解。整个过程有点类似于数学归纳法。

  • 机器人走方格
  • 硬币凑数问题
  • 括号组合问题
  • 生成所有子集
  • 全排列的多种写法(可以用逐步生成的方式也可以用DFS)


DFS类型的递归题型:

DFS最重要的是回溯和剪枝的处理:

回溯:递归调用代表开启一个分支,如果希望这个分支返回后某些数据恢复到分支开启前的状态以便重新开始,就要使用回溯技巧。全排列的交换法, 数独游戏, 部分和等问题都用到了回溯。

剪枝:深搜时,如果已经确定从当前状态无论如何转移都不会存在更解或者更优的解,就应该中断往下的继续搜索,这种方法称为剪枝。 数独游戏, 部分和里面都用到了剪枝。

  • 数独游戏
  • 部分和问题
  • n皇后问题
  • 素数环问题
  • 2n皇后问题

你可能感兴趣的:(#,算法很美课程学习,dfs,java,算法)