- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
树和二叉树(N皇后(回溯法))
回溯Backtracking;;学习要点;有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。
回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。
回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。;回溯算法是所有搜索算法中最为基本的一种算法,是一种能避免不必要搜索的穷举式的搜索算法,其基本思想就是穷举搜索。;回溯算法是所有搜索算法中最为基本的一种算法,是一种能避免不必要搜索的穷举式的搜索算法,其基本思想就是穷举搜索。;问题的解空间;生成问题状态的基本方法;回溯法的基本思想;递归回溯;迭代回溯;在一个n*n的国际象棋棋盘上放置n个皇后,使得它们中任意2个之间都不互相“攻击”,即任意2个皇后不可在同行、同列、同斜线上。
输出N,⑴求N皇后问题的一种放法;
⑵求N皇后问题的所有放法;要素二:约束条件;;回溯部份:
即状态恢复,使其恢复到进入该分支前的状态,继续新的分支
x[k]:=0;
Dec(k);
;Nqueens()
begin
x[1] ← 0
k ← 1
while k0 do
begin
x[k] ← x[k] +1
while x[k]=n and (not place(k)) do
x[k] ← x[k] +1
if x[k]=n then
if k=n then sum ← sum+1
else begin
k ← k+1
x[k] ← 0
end
else k ← k-1
end
end
;procedure try(k:byte);
var i:byte;
begin
for i:=1 to n do {每层均有n种放法}
if place(k) then {寻找放置皇后的位置}
begin
x[k]:=i; {放置皇后)
if k=n then print {8个皇后都放置好,输出}
{若只想找一组解,halt}
else try(k+1); {继续递归放置下一个皇后}
end;
end;;在n×m棋盘上有一中国象棋中的马:
马走日字;
马只能往右走。
请你找出一条可行路径,使得马可以从棋盘的左下角(1,1)走到右上角(n,m)。
输入:9 5
输出:(1,1)-(3,2)-(5,1)-(6,3)-(7,1)-(8,3)-(9,5);分析:
按题意,马每一步可以有4种走法!;;;约束条件:;Horse()
begin
path[1] ← 0,k ← 1,x ←1,y ←1
while (xm) and (yn) do
begin
path[k] ←path[k] +1
while (x + dx[i] = n) and (y + dy[i] 0) and (y + dy[i] = n) and (path[k]=4) do path[k] ← path[k] +1
if path[k]=4 then {在4种走法中找到不越界的走法}
begin
x ←x+dx[i],y ←y+dy[i]
if (xm) and (yn) then print
else begin
k ← k+
文档评论(0)