马的hamilton周游路线问题

马的hamilton周游路线问题

ID:14867910

大小:43.50 KB

页数:5页

时间:2018-07-30

马的hamilton周游路线问题_第1页
马的hamilton周游路线问题_第2页
马的hamilton周游路线问题_第3页
马的hamilton周游路线问题_第4页
马的hamilton周游路线问题_第5页
资源描述:

《马的hamilton周游路线问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、课程设计报告文档题目:马的Hamilton周游路线问题一.任务的描述1.目标:进一步巩固C程序设计和算法设计与分析的基础知识,提升结构化程序、模块化程序设计的方法和能力,深入理解数据结构的基本理论,掌握数据存储结构的设计方法,掌握基于数据结构的各种操作的实现方法,训练对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。2.任务描述:完成马的Hamilton周游路线问题.使得确定能对给定的偶数m,n≥6且

2、m-n

3、≤2,编程计算m╳n的国际象棋棋盘上马的一条Hamilton周游路线;并且程序能够演

4、示一条Hamilton周游路线的周游过程等。3.运行环境:1).PC兼容机2).Windows2000/XP操作系统3).TC集成开发环境或其他C语言开发环境。4.条件与限制:一次输入的两个数值m,n必须是不小于6的偶数,而且,两数值相差不大于2二.任务设计1.系统流程图:5Output函数主函数Knight函数Step函数Comp函数Pos函数Base函数Build函数2.函数的划分:(1)函数1:Knight(intmm,intnn)。主要用于构造函数读入基本数据,初始化个数组。mm,nn分别表示子棋盘的行数和列数,二维数组link存放Hamilton回路。(2

5、)函数2:Step(intm,intn,int**a,grid*b)。Step用于将读入的基础棋盘的Hamilton回路转化为网格数据。m,n分别表示棋盘的行数和列数,二位数组a存放文件读入所对应的步数,b数组依次存放a数组中各步次序所对应的坐标。(3)函数3:Comp(intmm,intnn,intoffx,intoffy)。分治法主体,分mm,nn为子棋盘行列数,offx,offy为出发点。5(4)函数4:Base(intmm,intnn,intoffx,intoffy)。根据基础解构造子棋盘的结构化Hamilton回路。mm,nn为子棋盘行列数,offx,of

6、fy为出发点。(5)函数5:Build(intm,intn,intoffx,intoffy,intcol,grid*b)。base实际由Build来实现。m,n分别表示棋盘的行数和列数,offx,offy为出发点,col为棋盘列数,b数组依次存放a数组中各步次序所对应的坐标。(6)函数6:Pos(intx,inty,intcol)。pos用于计算棋盘方格的编号,从左至右,从上到下编号。x和y分别表示棋盘上某点的横坐标和纵坐标,col为棋盘列数,最后返回编号。(7)函数7:Output(intoffx,intoffy)。按照要求输出计算出的结构化Hamilton回路,

7、输出a数组,b数组。3.函数之间的关系:主函数调用了Output()函数和Knight()函数。Output()函数调用了Comp()函数。Comp()函数调用了Base()函数和Pos()函数。Base()函数调用了Pos()函数。Knight()函数调用了Step()函数。三.编写代码1.问题1(1)问题描述:运用回溯法求分割步的解过于困难(2)解决办法:使用文件,将求解过程简化为读入已知文件52.问题2(1)问题描述:输出数组时,总是输出一串连续的长字符串,没有空格(2)解决办法:修改字符长度setw(4),即使得输出数字独立可读。3.问题3(1)问题描述:自

8、定义起点,总是失败,输出错误(2)解决办法:定义起点为(0,0),因为已知文件只能以此为起点。四.程序运行1.程序运行的过程:根据界面提示输入m和n。运行后,进入主函数,调用Knight函数,最后调用Output函数,输出数组a和b,就可以知道马的路径。2.错误描述及其解决办法(1)问题1:问题描述:由于算法以C++为主,用VC调试,出现很多语法问题解决办法:根据提示意义改正,较为费力,向同学请教,终于成功。如果完全是C++,可以考虑用VisualStudi。(2)问题2:问题描述:程序只能从(0,0)坐标开始才能运行解决办法:使用读入文件只有能从(0,0)坐标开始

9、5的,所以最终结果也只能从(0,0)坐标开始,想要修改,只能修改文件。五.感想认识该算法主要在于使用分治法的基本思想:将一个规模较大的问题分解为多个规模较小相互独立且与原问题相同的子问题,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。通过该算法的实现,我对分治法有了进一步的认识。用分治法可以运用回溯法或其他方法解决的问题先分块再合并递归地解决较为复杂的问题。分治法目的即是将一个难以直接解决的大问题分割成一些规模较小的相同问题,一遍各个击破,分而治之。分治法的适当使用,可以显著提高算法的效率。5

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。