- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
马踏棋盘 正式作业
数据结构与算法分析
课程设计报告
设计题目: 马踏棋盘
专 业 计算机科学与技术
学 号
姓 名
年 月 日
马踏棋盘
数据结构课程设计
概要设计
功能模块化分析
通过对问题描述的分析,可知马踏棋盘问题所要求实现的功能大致由三个部分组成:
⑴接收用户输入的马的起始位置;
⑵从起始位置开始在棋盘上标记马按问题描述中的行走规则访问棋盘中每个格子的顺序;
⑶输出棋盘上标记的访问顺序。
系统结构的总体设计
⑴输入模块:提示用户输入数据,接收用户输入的数据,即马的起始位置,并判断该位置是否在棋盘内。若该起始位置在棋盘内,则接着执行下一模块的功能;若该起始位置不在棋盘内,则提示用户输入无效,并要求用户再次输入;
⑵初始化模块:初始化所有的数据结构中的数据;
⑶棋盘遍历模块:采用特定算法,按照马的行走规则对棋盘进行遍历,每次访问一个格子时,要测试该格子是否在棋盘范围内,保存马的访问顺序;
⑷位置测试模块:接收格子的x和y坐标,判断该格子是否在棋盘内,然后根据该格子是否在棋盘内返回不同的信号;
⑸输出模块:将棋盘遍历模块中保存下来的讯号进行输出,输出格式遵从棋盘格式;
⑹总控模块:负责调用个处理模块,完成马踏棋盘问题的求解。
处理方式设计
针对问题和核心模块,采用深度优先遍历思想和回溯算法的非递归形式。
⑴深度优先遍历的基本思想
深度优先遍历可以从任意顶点开始访问图的顶点,然后把该顶点标记为已访问。在每次迭代的时侯,该算法紧接着处理与当前顶点邻接的未访问顶点。如果有若干个这样的顶点,可以任意选择一个顶点。凡在实际应用中,选择哪一个邻接的未访问候选顶点主要是由表示图的数据结构决定的。
⑵回溯算法的基本思想
回溯法是穷举查找技术的一个变种。它每次只构造解的一个分量,然后按照下面的方法来评估这个部分构造解。如果一个部分构造解可以进一步构造而不会违反问题的约束,我们就接受对解的下一个分量所做的第一个合法选择。如果无法对下一分量进行合法的选择,就不必对剩下的任何分量再做任何选择了。在这种情况下,该算法进行回溯,把部分构造解的最后一个分量替换为它的下一个选择。
详细设计
详细设计的主要任务是详细设计的目标有两个:实现模块功能的算法要逻辑上正确和算法描述要简明易懂st_chess:这是一个结构体,该结构体内有标记棋盘上该位置是否被访问过的visited整型变量,存储马的访问次序的route整型变量,马在访问该位置时的前驱位置的x坐标的prex整型变量,马在访问该位置时的前驱位置的y坐标的prey整型变量,马下次回溯到该位置时应该从哪个方向开始试探的direction变量。并生成该结构体的一个实例chess[10][10],存储棋盘上的各种标记信息。
⑶startx和starty:这是两个整型变量,表示起始位置的x坐标和y坐标,用于接收和存放用户输入的数据。
测试模块
⑴接口:接收上级模块传送的两个整型变量x和y;
⑵核心函数:test();
测试模块的程序流程图如图所示。
输入模块
⑴接口:不接受任何数据;
⑵数据结构:使用已经定义的全局整型变量startx和starty;
⑶核心函数:start_pos();
输入模块的程序流程图如图所示。
初始化模块
⑴接口:不接受任何数据;
⑵核心函数:init();
⑶操作:将全局数据结构chess[ ][ ]中的所有标记信息均标记为0。
棋盘遍历模块
⑴接口:不接受任何数据;
⑵核心函数:horse_chess();
棋盘遍历模块的程序流程图如图所示。
确认测试
⑴测试用例设计:
输入数据 预期输出 ( 8 , 8 ) “输入无效!请重新输入!”
( 0 , 0 ) 01 64 60 34 03 36 19 22
61 54 02 37 20 23 04 17
63 59 33 47 35 18 21 10
53 48 38 58 24 11 16 05
62 32 46 49 39 26 09 12
55 52 57 25 43 15 06 27
31 45 50 40 29 08 13 42
51 56 30 44 14 41 28 07
( 2 , 5 ) 64 61 47 42 37 15 02 11
48 43 38 45 40 12 17 14
60 46 41 36 16 01 10 03
57 49 44 39 34 18 13 08
62 59 35 30 51 09 04 19
54 55 50 33 28 22 07
原创力文档


文档评论(0)