回溯算法核心思想:试错和回退
- 构建一个搜索树(或递归树),在搜索树上进行深度优先遍历
- 发现当前路径不可能得到有效解决方案时,会进行剪枝操作(即回退到上一步),继续搜索其他路径
回溯算法实践问题
回溯算法实现思路
- 核心在于找到:递归式和递归边界
- 递归式:树形逻辑模型的构建,关键在于找 “坑位”,一个坑位就对应树中的一层,每一层的处理逻辑往往是一样的
- 递归边界:要么在题目中约束得非常清楚,要么默认为“坑位” 数量的边界
回溯算法伪代码
function xxx(入参) {
前期的变量定义、缓存等准备工作
const path = []
dfs(起点)
dfs(递归参数) {
if(到达了递归边界) {
结合题意处理边界逻辑,往往和 path 内容有关
return
}
for(遍历坑位的可选值) {
path.push(当前选中值)
处理坑位本身的相关逻辑
path.pop()
}
}
}