day24-1 回溯算法理论基础
- 递归函数下面一般紧跟的就是回溯算法
- 回溯算法一般是纯暴力搜索
- 回溯法解决的问题都可以抽象为树形结构(N叉树)
- 能够解决哪些问题?
- 组合问题:N个数里面按一定的规则找出k个数的组合
- 切割问题:一个字符串按一定规则有几种切割方式
- 子集问题:一个N个数的集合里面有多少符号条件的子集
- 排列问题:强调顺序
- 棋盘问题:N皇后和解数独
- 过程:
- 终止条件:收集结果
- 单层搜索逻辑:处理结点+递归函数+回溯操作
// 回溯算法模版
void backtracking(参数){
if(终止条件){
// 搜索到叶子结点就找到了一条满足条件的答案
存放结果;
return;
}
// 遍历过程 for循环横向遍历,backtracking递归纵向遍历
for(选择:本层集合中的元素(数中节点孩子的数量就是集合的大小)){
处理结点;
backtracking(路径,选择列表);//递归
回溯,撤销处理的结果
}
}
day24-2 77.组合
为啥要用回溯算法?
- 解决多层嵌套循环的问题

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



