题1n皇后问题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
题1n皇后问题

【题1】n皇后问题 一个n×n(1≤n≤100)的国际象棋棋盘上放置n个皇后,使其不能相互攻击,即任何两个皇后都不能处在棋盘的同一行、同一列、同一条斜线上,试问共有多少种摆法? 输入: n 输出: 所有分案。每个分案为n+1行,格式: 方案序号 以下n行。其中第i行(1≤i≤n)行为棋盘i行中皇后的列位置。 在分析算法思路之前,先让我们介绍几个常用的概念: 1、状态(state) 状态是指问题求解过程中每一步的状况。在n皇后问题中,皇后所在的行位置i(1≤i≤n)即为其时皇后问题的状态。显然,对问题状态的描述,应与待解决问题的自然特性相似,而且应尽量做到占用空间少,又易于用算符对状态进行运算。 2、算符(operater) 算符是把问题从一种状态变换到另一种状态的方法代号。算符通常采用合适的数据来表示,设为局部变量。n皇后的一种摆法对应1..a1 ,…,an )。排列中的每个元素ai 对应i行上皇后的列位置(1≤i≤n)。由此想到,在n皇后问题中,采用当前行的列位置i(1≤i≤n)作为算符是再合适不过了。由于每行仅放一个皇后,因此行攻击的问题自然不存在了,但在试放当前行的一个皇后时,不是所有列位置都适用。例如(l,)位置放一个皇后,若与前1..l-1j行皇后产生对角线攻击(|j-l|=|aj-i|)或者列攻击(i≠aj),那么算符i显然是不适用的,应当舍去。因此,不产生对角线攻击和列攻击是n皇后问题的约束条件,即排列(排列a1,…,ai,…,aj,…,an )必须满足条件(|j-i|≠|aj-ai|) and (ai≠aj ) (1≤i,jn)。 3、解答树(analytic tree) 现在让我们先来观察一个简单的n皇后问题。设n=4,初始状态显然是一个空棋盘。 此时第一个皇后开始从第一行第一列位置试放,试放的顺序是从左至右、自上而下。每个棋盘由4个数据表征相应的状态信息(见下图): (× × × ×) 其中第i(1≤i≤4)个数据指明当前方案中第i个皇后置放在第i行的列位置。若该数据为0,表明所在行尚未放置皇后。棋盘状态的定义如下 var stack:array[1‥4]of integer; {stack[i]为i行皇后的列位置} 从初始的空棋盘出发,第1个皇后可以分别试放第1行的4个列位置,扩展出4个子结点。 在上图中,结点右上方给出按回溯法扩展顺序定义的结点序号。现在我们也可以用相同方法找出这些结点的第二行的可能列位置,如此反复进行,一旦出现新结点的四个数据全非空,那就寻到了一种满足题意要求的摆法。当尝试了所有可能方案,即获得了问题的解答,于是得到了下列图形。 该图形象一棵倒悬的树。其初始结点v1 叫根结点,而最下端的结点v3 、v5 、v9 、v13 、v16 、v17 称为叶结点,其中2个数据全非零的叶结点,亦即本题的目标结点。由根结点到每一个目标结点之间,揭示了一种成功摆法的形成过程。显然,4皇后问题存在由v9 、v13 表示的二种方案。上图被称作解答树。树中的每一结点都是当前方案中满足约束条件的元素状态。除了根结点、叶结点以外的结点都称作分枝结点。分枝结点愈接近根结点者,辈分愈高;反之,愈远离根结点者,辈分愈低。上图中结点v7 是结点v8 的父结点(又称前件),结点v13是结点v12的子结点(又称后件)。某结点所拥有的子结点的个数称作该结点的次数。显而易见,所有叶结点的次数为0。树中各结点次数最大值,被称作为该树的次数。算符的个数即为结解答树的次数。由上图可见,4皇后的解答树是4次树。 一棵树中的某个分枝结点也可视作为“子根”,以该结点为根的树则称作“子树”。由以上讨论可以看出解答树的结构: 1、初始状态构成(主)树的根结点。对应于n皇后来说,初始时的空棋盘即为根结点; 2、除根结点以外,每个结点都具有一个、且只有一个父结点。对应于n皇后问题来说,置放i行皇后的子结点,只有在置放了前i-1行皇后的一个父结点基础上产生; 3、每个非根结点都有一条路径通往根结点,其路径长度(代价)定义为这条路径的边数。对应于n皇后来说,当前行序号即为路径代价。当路径代价为n+1时,说明n个皇后已置放完毕,一种成功的摆法产生。 有了以上的基础知识和对n皇后问题的初步分析,我们已经清楚地看到,求解n皇后问题,无非就是做两件事: 1、从左至右逐条树枝地构造和检查解答树t; 2、检查t的结点是否对应问题的目标状态; 上述两件事同时进行。为了加快检查速度,一般规定: 1、再扩展一个分枝结点前进行检查,只要它不满足约束条件,则不再构

文档评论(0)

ctuorn0371 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档