(1). 问题框架
设问题的解是一个n维向量(a1,a2, ... an) 约束条件是ai(i = 1,2,3...n)之间满足某种条件,计为f(ai)
(2). 非递归回溯框架
int a[n], i;
初始化数组a[];
i = 1;
while(i > 0(有路可走) and (未达目标)){
if(i > n){
搜索到一个解,输出;
}else{
a[i]第一个可能的解;
while(a[i]在不满足约束条件且在搜索空间内){
a[i]下一个可能的值;
}
if(a[i]在搜索空间内){
标识占用的资源;
i = i + 1; // 拓展下一个节点
}else{
清理所占用的状态空间
i = i - 1; // 回溯
}
}
}
(3). 递归的算法框架
int a[n];
try(int i){
if(i > n) 输出结果;
else{
for(j = 下界; j <= 上界; j=j+1){ // 枚举可能的路径
if(fun(j)){
// 满足限界函数和约束条件
a[i] = j ;
try(i+1);
回溯的清理工作比如a[i]置空
}
}
}
}