代码框架
子集树:
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);
}
}
}
排列树:
void backtrack(int t){
if(t > n) output(x);
else{
for(int i = f(n,t); i <= g(n,t);i++){
swap(x[t],x[i]);
if(constraint(t) && bound(t)) backtrack(t+1);
swap(x[t],x[i]);
}
}
}