递归与回溯算.ppt

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
递归与回溯算法 回溯法的基本思想为: 在按某种搜索策略的搜索过程中,在某种状态,继续往前搜索已经确定不会得到正确答案的情况下,我们可以返回上一搜索状态,去沿新的可能性继续搜索。要回溯到上一状态,则说明我们在前进中的状态必须保存下来,我们采用“栈”来存放。 基本思路:若已有满足约束条件的部分解,不妨设为(x1,x2,x3,……xi),in,则添加x(i+1)属于s(i+1),检查(x1,x2,……,xi,x(i+1))是否满足条件,满足了就继续添加x(i+2)、s(i+2),若所有的x(i+1)属于s(i+1)都不能得到部分解,就去掉xi,回溯到(xi,x2,……x(i-1)),添加那些未考察过的xi属于si,看其是否满足约束条件,为此反复进行,直至得到解或证明无解。 回溯法的特点为: 1.搜索策略:符合递归算法,问题解决可以化为子问题,算法类似,规模减小。 2.控制策略:当遇到失败的搜索状态,需要返回上一状态,沿另外的路径搜索。 3.数据结构:用数组保存搜索过程中的状态、路径。 参考结构: procedure try(i:integer); var begin if in then 输出结果 else for j:=下界 to 上界 do begin x[i]:=h[j]; if 可行{满足限界函数和约束条件} then begin 置值;try(i+1); 取消置值;end; end; end; 算法框架: 1.针对所给问题,定义问题的解空间; 2.确定易于搜索的解空间结构; 3.以深度优先的方式搜索解空间,并且在搜索过程中用剪枝避免无效搜索; 4.递归回溯:由于回溯法是对解空间的深度优先搜索,因此在一般情况下可用递归函数来实现回溯法 。 下面是放置第i个皇后的的递归算法: procedure try(i:integer); {搜索第i行皇后的位置} var j:integer; begin if i=n+1 then 输出方案; for j:=1 to n do if 皇后能放在第i行第j列的位置 then begin 放置第i个皇后; 对放置皇后的位置进行标记; try(i+1) 对放置皇后的位置释放标记; end; end; N皇后问题的递归算法的程序如下: program N_Queens; const maxn= 10; {最多皇后数} var A:array [1..maxn] of boolean; {同列-竖线被控制标记} b:array [2..maxn * 2] of boolean;{i+j和相等-左下到右上斜线被控制标记} c:array [1–maxn..maxn–1] of boolean;{j-i差相等-左上到右下斜线被控制标记} x: array [1..maxn] of integer;  {记录皇后的解} total:longint;   {解的总数} n: integer; {皇后个数} procedure out; {输出方案} var i: integer; begin inc(total); write(total: 3, ‘:’); for i:= 1 to n do write(x[i]: 3); writeln; end; procedure try(i: integer); {搜索第i个皇后的可行位置} var j: integer; begin if i= n+1 then out; {N个皇后都放置完毕,则输出解} for j:= 1 to n do if a[j] and b[j + i] and c[j – i] then begin x[i] := j; a[j] :=false; b[j + i] :=false; c[j – i] :=false; try(i + 1); {搜索下一皇后的位置} a[j] := true; b[j + i] :=true; c[j – i] :=true;

文档评论(0)

daijun + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档