折半算法解决完整文档.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文档。上传文档
查看更多
折半算法解决完整文档

数据结构第二次上机作业 班级:070921 姓名:张玲玲 学号报告名称:利用递归进行编程 上机时间:2010年9月29日 报告时间:2010年10月5日 实验目的:深入了解函数的调用与返回;理解递归函数的执行过程;学会利用函数的执行过程。 实验方法:利用把迭代公式翻译成代码和确定终止代码的方法,写出递归函数,从而执行程序。 实验结果:程序运行成功,顺利得出结果。 题1:八皇后问题 【在8*8的棋盘上放置八个皇后,要求这八个皇后相互不能攻击(同行,同列,斜线)】 问题重述: 八皇后问题要求在一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击.按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子. 因此,八皇后问题等于要求八个皇后中的任意两个不能被放在同一行或同一列或同一斜线上。 而我的目的也是通过用C语言平台将一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击的92种结构予以实现.?使用递归方法最终将其问题变得一目了然,更加易懂。 算法描述: A、 数据初始化。 B、 从n列开始摆放第n个皇后(因为这样便可以符合每一竖列一个皇后的要求),先测试当前位置(n,m)是否等于0(未被占领)。如果是,摆放第n个皇后,并宣布占领(记得姚横列竖列斜列一起设置),接着进行递归;如果不是,测试下一个位置(n,m+1),但是如果当n=8,m=8时,发现此时已无法摆放时,便要进行回溯。从问题的某一种可能出发,搜索从这种情况能出发,继续搜索,这种不断“回溯”的寻找解的方法,称为“回溯法”。 C、使用数组实现回溯法的思想。 D、当n8时,便打印出结果。 E、输出函数我使用printf输出,运行形式为:第m种方法为:* * * * * * * * 算法流程图: 结构体变量说明: int iCount = 0; //!记录解的序号的全局变量。 int Site[QUEENS]; //!记录皇后在各行上的放置位置的全局数组。 void Queen(int n); //!递归求解的函数。 void Output();//!输出一个解。 int IsValid(int n); //!判断第n个皇后放上去之后,是否有〉冲突。 四、函数说明: 解决冲突问题: 在这个问题中包括了行,列,两条对角线; 列:规定每一列放一个皇后,不会造成列上的冲突; 行:当第I行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以I为下标的标记置为被占领状态; 对角线:对角线有两个方向。在这我把这两条对角线称为:主对角线和从对角线。在同一对角线上的所有点(设下标为(i,j)),要么(i+j)是常数,要么(i-j)是常数。因此,当第I个皇后占领了第J列后,要同时把以(i+j)、(i-j)为下标的标记置为被占领状态。 对于数据结构的实现,着重于: 数组a[I]:a [I]表示第I个皇后放置的列;I的范围:1..8; 对角线数组:b[j](主对角线),c[j](从对角线),根据程序的运行,去决定主从对角线是否放入皇后; 程序执行结果: 遇到的问题: 当用printf输出时,出现了一些错误,几经调试后,发现原来是缺少了stdio.h这样一个头文件,添加了头文件后, 还出现了一些问题,逻辑错误导致程序死循环或不循环或循环一小部分,但是编译时却没有错误,就是没有正确的输出答案,一开始我也不知道是怎么回事,通过和同学的交流,发现是逻辑错误,经过改正后,程序终于可以运行了. 附录: 程序源代码 #include conio.h #include math.h #include stdlib.h #include stdio.h #include iostream.h #define QUEENS 8 int iCount = 0; //!记录解的序号的全局变量。 int Site[QUEENS]; //!记录皇后在各行上的放置位置的全局数组。 void Queen(int n); //!递归求解的函数。 void Output();//!输出一个解。 int IsValid(int n); //!判断第n个皇后放上去之后,是否有冲突。 void main() { system(title递归算法八皇后问题 ); cout 八皇后的解法:endl; cout -------------------------------------endl; Queen(0); //!从第0行开始递归试探。 getch();//!按任意键返回。 } void Quee

文档评论(0)

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

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档