数据结构课程设计-马踏棋盘.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文档。上传文档
查看更多
学 号: 2012812044 杭州师范大学 钱江学院 课 程 设 计 题 目 马踏棋盘算法研究 教 学 院 信息与机电工程分院 专 业 计算机科学与技术 班 级 计算机1201 姓 名 吴秋浩 指导教师 王李冬 2013 年 12 月 21 日 目 录 TOC \o \h \z HYPERLINK \l _Toc170534730 一.概述 PAGEREF _Toc170534730 \h 2 HYPERLINK \l _Toc170534731 二.总体方案设计 PAGEREF _Toc170534731 \h 3 HYPERLINK \l _Toc170534732 三.详细设计 PAGEREF _Toc170534732 \h 4 HYPERLINK \l _Toc170534733 四.最终输出 PAGEREF _Toc170534733 \h 5 HYPERLINK \l _Toc170534734 五.课程设计总结 PAGEREF _Toc170534734 \h 6 HYPERLINK \l _Toc170534737 参考文献 PAGEREF _Toc170534737 \h 7 一 概述 课程设计的目的 课题描述 设计一个国际象棋的马踏遍棋盘的演示程序。 课题意义 通过“马踏棋盘”算法的研究,强化了个人对“栈”数据结构的定义和运用,同时也锻炼了自身的C语言编程能力。另一方面,通过对“马踏棋盘”算法的研究,个人对“迷宫”、“棋盘遍历”一类的问题,有了深刻的认识,为今后解决以此问题为基础的相关的问题,打下了坚实的基础。 解决问题的关键点说明 解决问题的关键首先要熟练掌握C语言编程技术,同时能够熟练运用“栈”数据结构。另外,态度也是非常重要的。在课程设计过程中,难免会遇到困难,但是不能轻易放弃,要肯花时间,能静得下心,积极查阅相关资料,积极与指导老师沟通。 课程设计的要求 课题设计要求 将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,…,64依次填入一个8×8的方阵,输出之。 程序由回溯法和贪心法实现,比较两种算法的时间复杂度。 课题设计的思路 首先,搞清楚马每次在棋盘上有8个方向可走,定义两个一位数组,来存储马下一着点的水平和纵向偏移量。程序再定义一个8*8二维数组,初始所有元素置0,起始点元素置1。若为回溯法,初始方向数据(一维数组下标)入栈。随后,马从起始点开始,每次首先寻找下一可行的着点,然后记下方向,方向数据入栈,把该位置元素置为合适的序列号,若无下一可行着点,则回溯,寻找下一方向位置着点,以此类推,直到64填入数组中,则输出二维数组,即为马可走的方案。若为贪婪法,选择下一出口的贪婪标准是在那些允许走的位置中,选择出口最少的那个位置。直到没有下一着点位置,若此时已标记到64,则找到可行方案,输出之。反之,改变初始寻找方向继续寻找,直到8种方向顺序都试过,若还是没有合适的方案,则说明以该起始 点开始马无法踏遍棋盘。 二 总体方案设计 回溯法 算法思想 按深度优先策略,从一条路往前走,能进则进,不能进则退回来,换一条路再试,也就是说每当前进的路不通,我们总是返回到前一次的岔路口,选择下一条新的路线 。 (1)函数头文件定义和宏定义 #includestdio.h #includestdlib.h #define N 8 //便于改变棋盘大小 (2)栈数据结构定义 typedef struct{ int b[N*N]; //记录每次走的方向 int top; //栈指针 }SqStack; (3)定义探寻路径函数 Board[N][N]模拟N*N棋盘,填入1,2,3···64。 x、y传递初始位置。 bool HorsePath(int Board[][N],int x,int y){ // 初始化栈 //定义方向数组 //int xx[8]={1,2,2,1,-1,-2,-2,-1}; //int yy[8]={2,1,-1,-2,-2,-1,1,2}; //初始方向下表入栈 //回溯法开始寻找合适方案(详见“详细设计”) } (4)定义主函数 void main(){ //定义基本变量及Board[N][N]数组 //输入初始位置x0,y0 //调用HorsePath(Board,x0,y0); //输出方案 } 贪心法 算法思想 从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停

文档评论(0)

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

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

1亿VIP精品文档

相关文档