设计基础11_2_递归试卷.pptVIP

  • 4
  • 0
  • 约1.6万字
  • 约 85页
  • 2017-03-02 发布于湖北
  • 举报
在8×8的棋盘上保证摆放8个皇后,要保证所有皇后不能在同一行、同一列以及同一对角线上,应该采用试探的方式,即:“试着摆着往后走,碰壁后回头重新摆”的策略。 (1)定义函数queen(i),用来试探摆放第i行上的皇后; (2)在第i行上摆放的皇后可能在其中的某一列(1~8),需要检测摆放的安全性,下面来讨论本次摆放的安全性: 由于皇后是逐行摆放的,因此不会存在一行摆放多个皇后的情况,不需考虑同行皇后的攻击问题。带来攻击的可能只是在同列以及同一对角线上出现,这是下一步主要考虑的安全性检查的因素,下面分别来分析处理: * ①同一列的攻击情况的处理: 定义数组q [ i ]用来表示第i行上的皇后所在的列位置,如j= q [ i ]表示第i行上皇后放在第j列。 为了测试该列是否可以放皇后,再定义一个标记数组c [ j ],c [ j ]=0表示第j列已有皇后,不能再放皇后;c [ j ]=1表示第j列未有皇后,可以放一个皇后,并且放完之后使c [ j ]的赋值为0,表示以后不能再放。 * ②同一对角线攻击情况的处理: 要考虑在第i行第j列所在的对角线的安全性,首先要表示出(i,j)位置所在的两条对角线的特点。经过(i,j)的两条对角线的特征: 从左上到右下对角线上每个位置的行下标与列下标之差是同一个常数; 从左下到右上的对角线上的每个位置的行下标与列下标之和是同一常数。 比如对于下图11.2

文档评论(0)

1亿VIP精品文档

相关文档