《算法设计与分析》-回溯.ppt

避免无效搜索 单击增加标题内容 用约束函数在扩展结点出剪去不满足约束的子树 用限界函数剪去得不到最优解的子树 两类函数通称为剪枝函数 递归回溯 Void backTrace (int t) {If(tn) { output(x); }else{ for(i=f(n,t);i=g(n,t);i++){ x[t]=h[i]; if(constraint(t)bound(t)){ backtrack(t+1);} } } } Void iterativeBacktrack(int t) {t=1; While(t0){ if(f(n,t)=g(n,t)) for(i=f(n,t);i=g(n,t);i++){ x[t]=h[i]; if(constraint(t)bound(t)) { if(solution(t))output(x); else t++;} } else t---; } } 迭代回溯 在8×8的棋盘上放置8个皇后,使得这8个皇后不在同一行、同一列及同一斜角线上。如图: N后问题 剪枝函数 8皇后问题可以表示成8元组(x1,…,x8),其中xi是放在第i行的皇后所在的列号。于是,解空间由8个8元组组成。 约束条件:xi≠xj for all i, j |

文档评论(0)

1亿VIP精品文档

相关文档