皇后问题(Queens)实验上机报告.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文档。上传文档
查看更多
皇后问题(Queens)实验上机报告.doc

皇后问题 Queens 实验上机报告 程序名称:皇后问题 Queens v1.0.0.2 程序设计环境: 硬件环境:Intel Pentium Ⅱprocessor 451 MHz 128 MB of Ram 操作系统:Microsoft Windows XP Professional Version 2002 编程软件:Visual C++ 6.0 程序可执行环境:Microsoft Windows 32/9x/NT/2000/XP/2003 试验目的: 掌握函数的递归调用 掌握求解回退算法 实现对n个皇后问题求解的一般方法 实验过程: 设想使用1位数组实现对n皇后问题的求解 设想理由(以8皇后问题作为入手点): 由于8个皇后中人以两个不在一行、不在一列、不在同一主对角线,不在同一列对角线,因此,每行只可能有一个皇后,只需要顺序记录下每行所放的皇后所在列的号码,就可以将整个棋形图进行记录。 在算法方面,可以使用一位数组的序号 index 纪录行标,其相应值记录列标。从下标0开始自小而大依次进行放子,总是放到当前行第一个未被使用的Free(满足8皇后问题的条件的)格子上。每放完一行,就对下一行(作为当前行)进行放置,如果8个皇后都已放下,输出结果。当前行如果没有地方放置棋子,将当前行复位(reset)并返回到上一行进行放置,如果首行再也没法放子,则标志所有可能都已访问。则在这里可以设置程序的出口。 定义声明Queens类。 根据设想,对Queens类进行生成,构造函数Queens int s 对类进行初始化其中s为初始化棋盘的大小,默认值为8。solve_from 函数为主要求解函数,当找不到下一种解,即已求完全部解。size纪录了棋盘的大小,count记录了当前行行标。Square为纪录棋形图数组的头指针。GetNextFreeCol int the_row 函数作用为找当前行的下一个空位(即第一个为被用的位置)。checkFree int,int,int,int 函数作用为判断某个格子和另一个格子是否发生冲突(两个皇后能否相互吃掉)不冲突返回真,冲突返回假。Print 函数为结果输出函数。 主要函数设计草图: 棋形图的初始化: for int i;i size;i++ s[i] -1; 得到第i排的下一种情况,返回列标 声明:int GetNextFreeCol int i 算法: function start got false; for int value 现在的value+1;value size且!got(即还没有找到);value++ for int row 0;列不重合、主对角线不重合、从对角线不重合、row I;row++ ; got row i ; 如果got 1,返回value— 否则返回-1(复位) function end 得到当前情况的下一种情况 声明:void solve_from 算法: function start Square[count] GetNextFreeCol Col ; If Square[count] -1 count--; 如果count -1→出口 else count++; if count size print输出 再次调用solve_from; function end 类的功能测试 test function start Queens test 4 ; test.solve_from ; Return 0; Function end 测试输出 1 3 0 2 2 0 3 1 完善Queens类 添加私有成员函数total用于记录solve_from调用的次数 添加私有成员函数result用于记录所有解的个数 添加私有成员cfPtr用于实现结果的存盘 添加私有成员start,end用于计算程序运行所用的时间 以毫秒计 完善主程序 完善程序界面 实现自定义棋盘大小 当实现后发现当size 9时,变成环境报错”Stack overflow”,经分析,是由于调用solve_from后没有退出当前函数又进行下一个solve_from造成资源的严重不足,于是决定改善solve_from函数为bool类型,每次只算下一种解,在函数出口,如果找不到下一种解(即已求得全部解),返回true,否则返回false 通过对返回值的判断,是该函数返回true时与程序的出口相连,从而解决了调用的资源负担。 实现计算当前的CPU频率(其中计算CPU频率的函数转自北信技术论坛) 实现存盘 调试过程简述: 初始类的测试 Queens Test 4 ; Test.solve_from ; 输出: Sol[1]:[1,2] [2,4] [3,1] [4,3]

文档评论(0)

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

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

1亿VIP精品文档

相关文档