骑士巡游问题C++报告.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文档。上传文档
查看更多
骑士巡游问题C报告

软件课程设计1报告 姓 名: 学 号: 姓 名: 学 号: 专 业: 计算机科学与技术 设计题目: 写程序求解骑士巡游问题 2010 年 07 月 01 日 中国矿业大学徐海学院课程设计综合成绩表 班 级 计算机08-2 姓 名 沈志伟 学 号题目名称 写程序求解骑士巡游问题 分 数 1、程序运行是否通过在线裁判系统(25分) ①题目难度系数(15分) ②通过与否系数(10分) ① ② 2、算法分析报告(45分) ①报告格式、版面是否清晰(10分) ②解题思路是否清晰,算法介绍是否详细(15分) ③流程图、算法时空复杂度分析详细程度(15分) ④源代码的格式、注释情况(5分) ① ② ③ ④ 3、答辩情况(30分) ①算法思路讲述清晰(15分) ②回答问题情况(15分) ① ② 总 评 成 绩 综合评定成绩 课程设计负责人签字: 年 月 日 目录 《Constructing Roads》解题与算法分析报告 一、题目描述 5 二、解题思路 8 三、相关算法介绍 8 四、主要数据结构 8 五、流程图 9 六、源程序 11 七、时空分析 13 一、题目描述 编写程序求解骑士巡游问题:在n行n列的棋盘上(如n=5),假设一位骑士(按象棋中“马走日”的行走法)从初始坐标位置(x1,y1)出发,要遍访(巡游)棋盘中的每一个位置一次。请编一个程序,为骑士求解巡游“路线图”(或告诉骑士,从某位置出发时,无法遍访整个棋盘 — 问题无解)。 n行n列的i,j)。 输出 例如,当n=5且初始坐标位置定为(1,1) — 即最左上角的那个点时,如下是一种巡游“路线图”。程序执行后的输出结果为: 1 6 15 10 21 14 9 20 5 16 19 2 7 22 11 8 13 24 17 4 25 18 3 12 23 (1)“棋盘”可用二维数组B表示。 (2)编制一个具有如下原型的递归函数solve,用于完成任务:从(i,j)点出发,做第k至第n*n(即n的平方)次的移动 — 将k直到n的平方这些数码按规则分别摆放到棋盘即数组B中,若成功则通过引用参数ok返回true,否则返回false。 void solve(int i, int j, int k, bool ok); (3)编制主函数,让用户输入作为巡游起点的初始坐标位置(x1,y1),在该处摆放“棋子”(数码)1,而后进行调用“solve(x1, y1, 2, ok);”来完成所求任务。 欲处理的初始问题为:从某点(x1,y1)出发,按所给行走规则,作24次移动,遍访棋盘中没被访问过的各点(或发现无路可走)。 可分解化简为如下两个子问题(正是形成递归函数的基础): ① 由点(x1,y1)出发,按所给行走规则作1次移动到达(g,h)(或发现无路可走); ② 从(g,h)点出发,按所给行走规则,作23次移动,遍访棋盘中没被访问过的各点(或发现无路可走)。 solve函数具体实现时,若由(i,j)点出发已“无路可走”,则将引用参数ok置为false而递归出口;否则,先“迈一步”到达(g,h)点,而后再进行递归调用:solve(g, h, k+1, ok);以实现从新点(g,h)出发,将k+1直到25这些“棋子”(数码)分别摆放到棋盘上,若成功则通过引用参数ok返回true(否则返回false)。 在函数或子过程的内部,直接或者间接地调用自己的算法。回溯:问题的每个解都包含N部分,先给出第一部分,再给出第二部分,……直到给出第N部分,这样就得到了一个解。若尝试到某一步时发现已经无法继续,就返回到前一步,修改已经求出的上一部分,然后再继续向后求解。这样,直到回溯到第一步,并且已经将第一步的所有可能情况都尝试过之后,即可得出问题的全部解。main()流程 A[i][j]=true Solve()流程 六、源程序 #include iostream #inclu

文档评论(0)

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

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

1亿VIP精品文档

相关文档