使用回溯搜索是典型的暴力搜索方式。可以抽象为一种树的遍历方式。因为回溯做的就是在集合中递归查找子集合的方式,寻找所有的可行解。其中所有的可选择方案就是树的横向宽度,通常用for实现所有可行方案的遍历;所有的选择结果就是树的纵向深度,最终的叶子结点意味着搜索结束,可选择对应的链路或终点作为一项方案。
回溯的基本框架为:
type backtracking(nums,index){
if(满足终止条件) {
记录结果;
return ;
}
for(所有可选择的方案){ //横向遍历
在当前已选的环境下继续选择方案
backtracking(nums,index); //纵向选择
释放当前方案
}
}