【递归实现】
void backtrack (int t)
{
if (t>n) output(x);
else
for(int i=f(n,t):i<=g(n,t):i++)//f(n,t),g(n,t)表示当前扩展节点处未搜索过的子树的起始编号和终止编号
{
x[t]=h[t];//h(i)为当前扩展节点处x[t]的第i个可选值
if(constraint(t)&&bound(t)) backtrack(t+1);//constraint(t)&&bound(t)是当前扩展节点处的约束函数和限界函数
}
【迭代回溯】
void iterative()
{
int t=1;
while(t>0)
{
if(f(n,t)<=g(n,t))
for(int i=f(n,t):i<=g(n,t):i++)
{
x[i]=h[i];
if(constrain(t)&&bound(t)){
if(solution(t)) output(x);//solution (t)判断在当前扩展节点处是否已得问题的可行解
else t++;
}
else t--;
}
}
}