回溯算法初学
- 解题步骤
- 设计 递归函数的参数
- 设置return条件(是否越界、是否在访问已访问过的节点、是否完成了任务)
- 单层递归逻辑
- 代码模板
全局变量X
void backtracking(参数){
if(返回条件) return
for( i ){
操作X
bcaktracking(i);
撤销操作X **** 这里是回溯算法的核心,当回到上层调用时,要把执行过的操作撤销掉。
}
}
- 回溯与递归的联系
- 回溯都是通过递归实现的
- 在一些问题中,如果把全局变量当做参数放进递归函数里,当 当前层执行完毕返回上一层时,调用栈会自动撤销当前层的操作,不用自己在上一层里在手动实现撤销。
- 但是某些问题可能无法只通过递归实现,而且使用全局变量+回溯有时候可能想起来更思路更清楚。