基本思想
试探法
从某一状态出发,不能再前进时,后退一步或若干步试探另一种状态。
指导思想–走不通就回头
将问题转化为图或树的结构,以深度优先的方式探索
解空间树-------子集树和排列树
深度优先 搜索解空间
void backtrack(int t){
if(t>n) output(x)
else
for(int i=f(n,t);i<=g(n,t);i++){
x[t]=h(i);
if (Constraint(t) && Bound(t)) //满足约束条件和限界函数
backtrack(t+1);
}
}
剪枝函数 避免无效搜索
约束函数扩展结点处剪去不满足约束的子树
限界函数剪去得不到最优解的子树