N皇后报告.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文档。上传文档
查看更多
N皇后报告

2011/2012学年第2学期 “算法分析与设计”上机报告 学院/系 信息工程学院计算机科学系 专业 计算机科学与技术 班级 项目名称 N皇后问题 组长 小组成员 N皇后联动 N皇后联动 N皇后gui N皇后算法 N皇后算法 N皇后联动 目录 摘要························第3页 关键字·······················第3页 问题描述······················第3页 算法分析······················第3页 伪代码·······················第4页 模块功能实现···················第4页 界面························第 9页 实现功能及其函数················ 第10页 总结·······················第 11页 2011/2012学年第2学期“算法分析与设计”上机报告 N皇后问题 摘要 N皇后问题是八皇后问题的扩展,这是一个经典问题,要求在一个N*N的棋盘上放置N个皇后,且使得每两个皇后之间都不能相互攻击,即它们中的任意两个都不能位于同一行、同一列或者同一对角线上。我们采用位运算的方法,实现了自由选择皇后个数、显示解的个数、显示求得全部解的时间、调整运行速度、暂停程序、显示上一解下一解、单步演示求得第一组解的回溯过程、单步演示执行上一步下一步、暂停单步演示、棋盘显示总区域一定,但是根据输入皇后的大小,会改变小格的大小这十项功能。并且,位运算的方法大大缩短了求解时间,减少程序运行时间。 关键字 N皇后、位运算、回溯、单步显示 问题描述 在一个N*N的棋盘上放置N个皇后,且使得每两个皇后之间都不能相互攻击,即它们中的任意两个都不能位于同一行、同一列或者同一对角线上。 算法分析 这是一个递归过程,程序一行一行地寻找可以放皇后的地方。过程带三个参数,row、ld和rd,分别表示在纵列和两个对角线方向的限制条件下这一行的哪些地方不能放。以6x6的棋盘为例,假设现在已经递归到第四层,前三层放的子已经标在下图上了。红色、蓝色和绿色的线分别表示三个方向上有冲突的位置,位于该行上的冲突位置就用row、ld和rd中的1来表示。把它们三个并起来,得到该行所有的禁位,取反后就得到所有可以放的位置(用pos来表示)。第6行后其结果是取出最右边的那个1。这样,p就表示该行的某个可以放子的位置,把它从pos中移除并递归调用test过程。注意递归调用时三个参数的变化,每个参数都加上了一个禁位,但两个对角线方向的禁位对下一行的影响需要平移一位。最后,如果递归到某个时候发现row=111111了,说明六个皇后全放进去了,此时程序从第1行跳到第11行,找到的解的个数加一。 伪代码 N—QUEEN(n) x[1]←0 K←1 While k0 do x[k]←x[k]+1 while x[k]=n not PLACE(k) do x[k]←x[k]+1 if x[k]=n then if k=n then output(X) else k←k+1 x[k]←0 else k←k-1 return PLACE(k) i←1 While ik do if(x[i]=x[k] or abs(x[i]-x[k])=abs(i-k)) then return (false) i=i+1 Return (true) 模块功能实现 1 算法实现 该算法采用的采用回溯法进行位运算,达到求解N皇后目的。位运算中先将所有位都置0,当该位置可以放皇后时,将此位置为1,依次类推,直至求出最终结果。该算法的优越之处在于采用位运算既节省了内存,也加快了运行时间,从空间和时间量方面使算法达到优化的目的。 其具体算法及注释如下: dfs(int row , int ld , int rd , int deep) { int i,buf,pos; if(deep == m_queenNumber) //如果deep==n,表示已经递归到最后一层,且是正确的解 { if(m_answerHANG) { for(i=0;im_queenNumber;i++) M_allAnswer[m_answer][i] = jilu[i]; //保存解到二维数组 } m_answer

文档评论(0)

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

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

1亿VIP精品文档

相关文档