毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

C++骑士巡游问题

更新时间:2011-5-14:  来源:毕业论文

C++骑士巡游问题
需求分析:     本程序主要解决的是: 编写程序求解骑士巡游问题:在n行n列的棋盘上(如n=5),假设一位骑士(按象棋中“马走日”的行走法)从初始坐标位置(x1,y1)出发,要遍访(棋盘中的每一个位置一次。并输出骑士巡游的“路线图”(或告诉骑士,从某位置出发时,无法遍访整个棋盘)。
    当n=5时,意味着要在5行5列的棋盘的25个“点”处,按骑士行走规则,依次将1至25这25个“棋子”(数码)分别摆放到棋盘上(摆满25个位置则成功,否则失败问题无解)。
行走路线函数solve()使用了递归的方法。direction数组表示在一个坐标可走的各个方向,ok表示是否已经按要求遍历整个棋盘,即k到了最大的25。

1.2概要设计:
本程设计思路: 本程序主要分为两部分:路线确定solve()函数与主函数。分函数主要用于从(i,j)点出发,做第k至第n*n(即n的平方)次的移动 ——— 将k直到n的平方这些数码按规则分别摆放到棋盘即数组B中,若成功则通过引用参数ok返回true,否则返回false。
主函数主要用于让用户输入作为巡游起点的初始坐标位置(x1,y1),在该处摆放“棋子”,而后进行调用“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)。
程序流程图(如下图):原文请找腾讯752018766六,维-论'文.网http://www.lwfree.cn/

main()函数的流程图:
solve(int i,int j,int k,bool& ok)的流程图
1.3   详细设计与编码:
见上传程序。

1.4  调试分析:
    在调试过程中程序遇到的问题如下:开始设计时不清楚可能的方向(所有可行的路线),对于问题的抽象化方面有问题;在solve函数的设计时遇到的问题很多,对函数的递归调用不是很熟悉,在递归条件的设计方面也有较大问题。解决问题主要是仔细阅读题目给出的设计步骤及要求,认真阅读了有关递归调用的资料,同时积极与同作此题的同学交流。
程序执行的结果:
1.5   用户使用说明: 
    用户根据程序的提示输入骑士作为巡游起点的初始坐标位置(x1,y1),在输入过程中要注意注意坐标位置大小的限制范围。

1.6  设计心得:
    本程序设计虽然与实际问题相联系,从题目来看不易理解,但是实现时主要运用函数递归调用的知识。在递归时应该特别注意约束条件的设置,设计过程中还应该注意数的变化与程序执行时的细节。本次实验使我体会到函数递归调用应注意到细节与方法,最大的收获是对实际问题的考虑更加全面,了解了一些要注意的事项。1832

[1] [2] 下一页

C++骑士巡游问题下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©lwfree.cn 六维论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。