马的Hmilton周游路线问题.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
马的Hmilton周游路线问题

课程设计报告文档 题目: 马的Hamilton周游路线问题 一.任务的描述 1.目标: 进一步巩固C程序设计和算法设计与分析的基础知识,提升结构化程序、模块化程序设计的方法和能力,深入理解数据结构的基本理论,掌握数据存储结构的设计方法,掌握基于数据结构的各种操作的实现方法,训练对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。 2.任务描述: 完成马的Hamilton周游路线问题.使得确定能对给定的偶数m,n≥6且|m-n|≤2,编程计算m╳n的国际象棋棋盘上马的一条Hamilton周游路线;并且程序能够演示一条Hamilton周游路线的周游过程等。 3.运行环境: 1). PC兼容机 2).Windows 2000/XP操作系统 3).TC集成开发环境或其他C语言开发环境。 4.条件与限制: 一次输入的两个数值m,n必须是不小于6的偶数,而且,两数值相差不大于2 二.任务设计 1.系统流程图: Output函数主函数 Output函数 主函数 Knight函数 Step函数 Comp函数 Pos函数Base函数 Pos函数 Base函数 Build函数 Build函数 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)坐标开始,想要修改,只能修改文件。 五.感想认识 该算法主要在于使用分治法的基本思想:将一个规模较大的问题分解为多个规模较小相互独立且与原问题相同的子问题,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。通过该算法的实现,我对分

文档评论(0)

cgsx259 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档