马的Hamilton周游路线问题.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文档。上传文档
查看更多
马的Hamilton周游路线问题

课程设计报告文档 题目: 马的Hamilton周游路线问题 一.任务的描述 1.目标: 进一步巩固C程序设计和算法设计与分析的基础知识,提升结构化程序、模块化程序设计的方法和能力,深入理解数据结构的基本理论,掌握数据存储结构的设计方法,掌握基于数据结构的各种操作的实现方法,训练对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。2).Windows 2000/XP操作系统 3).TC集成开发环境或其他C语言开发环境。 4.条件与限制: 一次输入的两个数值m,n必须是不小于6的偶数,而且,两数值相差不大于2 二.任务设计 1.系统流程图: 2.函数的划分: (1)函数1:Knight(int mm,int nn) 。主要用于构造函数读入基本数据,初始化个数组。mm,nn分别表示子棋盘的行数和列数,二维数组link存放Hamilton回路。 (2)函数2:Step(int m,int n,int **a,grid *b) 。Step用于将读入的基础棋盘的Hamilton回路转化为网格数据。m,n分别表示棋盘的行数和列数,二位数组a存放文件读入所对应的步数,b数组依次存放a数组中各步次序所对应的坐标。 (3)函数3:Comp(int mm,int nn,int offx,int offy)。 分治法主体,分mm,nn为子棋盘行列数,offx,offy为出发点。 (4)函数4:Base(int mm,int nn,int offx,int offy ) 。根据基础解构造子棋盘的结构化Hamilton回路。mm,nn为子棋盘行列数,offx,offy为出发点。 (5)函数5:Build(int m,int n,int offx,int offy,int col,grid *b)。 base实际由Build来实现。m,n分别表示棋盘的行数和列数,offx,offy为出发点,col为棋盘列数,b数组依次存放a数组中各步次序所对应的坐标。 (6)函数6:Pos(int x,int y,int col)。 pos用于计算棋盘方格的编号,从左至右,从上到下编号。x和y分别表示棋盘上某点的横坐标和纵坐标,col为棋盘列数,最后返回编号。 (7)函数7:Output(int offx,int offy)。按照要求输出计算出的结构化Hamilton回路,输出a数组,b数组。 3.函数之间的关系: 主函数调用了Output()函数和Knight()函数。 Output()函数调用了Comp()函数。 Comp()函数调用了Base()函数和Pos()函数。 Base()函数调用了Pos()函数。 Knight()函数调用了Step()函数。 三.编写代码 1.问题1 (1)问题描述:运用回溯法求分割步的解过于困难 (2)解决办法:使用文件,将求解过程简化为读入已知文件 2.问题2 (1)问题描述:输出数组时,总是输出一串连续的长字符串,没有空格 (2)解决办法:修改字符长度setw(4),即使得输出数字独立可读。 3.问题3 (1)问题描述:自定义起点,总是失败,输出错误 (2)解决办法:定义起点为(0,0),因为已知文件只能以此为起点。 四.程序运行 1.程序运行的过程:根据界面提示输入m和n。运行后,进入主函数,调用Knight函数,最后调用Output函数,输出数组a和b,就可以知道马的路径。 2.错误描述及其解决办法 (1)问题1: 问题描述:由于算法以C++为主,用VC调试,出现很多语法问题 解决办法:根据提示意义改正,较为费力,向同学请教,终于成功。如果完全是C++,可以考虑用Visual Studi。 (2)问题2: 问题描述:程序只能从(0,0)坐标开始才能运行 解决办法:使用读入文件只有能从(0,0)坐标开始的,所以最终结果也只能从(0,0)坐标开始,想要修改,只能修改文件。 五.感想认识 该算法主要在于使用分治法的基本思想:将一个规模较大的问题分解为多个规模较小相互独立且与原问题相同的子问题,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。通过该算法的实现,我对分治法有了进一步的认识。用分治法可以运用回溯法或其他方法解决的问题先分块再合并递归地解决较为复杂的问题。分治法目的即是将一个难以直接解决的大问题分割成一些规模较小的相同问题,一遍各个击破,分而治之。分治法的适当使用,可以显著提高算法的效率。 1 Pos函数 Base函数 Output函数 主函数 Knight函数 Step函数 Comp函数 Build函数

文档评论(0)

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

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

1亿VIP精品文档

相关文档