回溯法
1.算法概述
回溯法的本质其实是基于递归函数的暴力搜索且递归函数可以解决无法写出
n
n
n层for循环的暴力搜索方式
2.算法思想
某次尝试错误回到之前的时刻,重新尝试
平行+嵌套对应循环+递归
若使用回溯法将问题抽象成一颗
n
n
n叉树,则该树宽度由for循环进行遍历,该树深度由递归进行遍历
3.通过回溯法能解决的问题
排列问题,组合问题,子集问题,切割问题,棋盘问题
4.回溯法模板
void backtracking(参数)
{
if (终⽌条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩⼦的数量就是集合的⼤⼩)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}
}