0.回溯法【信息技术】.docVIP

  • 26
  • 0
  • 约7.21千字
  • 约 8页
  • 2017-09-27 发布于北京
  • 举报
例15:N皇后问题 在N*N的棋盘上放置N个皇后而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上不能放置2个皇后),编程求解所有的摆放方法。 分析: 由于皇后的摆放位置不能通过某种公式来确定,因此对于每个皇后的摆放位置都要进行试探和纠正,这就是“回溯”的思想。在N个皇后未放置完成前,摆放第I个皇后和第I+1个皇后的试探方法是相同的,因此完全可以采用递归的方法来处理。 下面是放置第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 = 100; {最多皇后数} var A:array [1..MaxN] of Boolean; {竖线被控制标记} B:array [2..MaxN * 2] of Bo

文档评论(0)

1亿VIP精品文档

相关文档