ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:86.94KB ,
资源ID:3644088      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3644088.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构迷宫求解课程设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构迷宫求解课程设计报告.docx

1、数据结构迷宫求解课程设计报告课程设计报告课程名称: 数据结构 报告题目: 迷宫求解 学生姓名: XX 所在学院: 信息科学与工程 专业班级: 软件工程 学生学号:XXXXXXXXXXX 指导教师: XXX 2017 年 12 月 29 日课程设计任务书报告题目迷宫求解程序设计完成时间2017.12.29学生姓名 专业班级指导教师XXX职 称总体设计要求和技术要点课程设计要求1.可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;2.在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;

2、工作内容及时间进度安排第17周:周1-周3 :立题、论证方案设计周4-周5 :完成项目一,项目二的整体设计第18周:周1-周2:调试程序,解决问题周3-周5 :写实验报告 课程设计成果1程序设计内容以及对应的软件程序2课程设计总结报告摘 要 本程序主要是求迷宫中从人口到出口的所有路径是一个经典的程序设计问题。计算机解迷宫时,通常用的是“穷举求解”的方法,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路返回,换一个方向在继续探索,直至所有可能的通路都探索完为止。当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索,即切换为“下一位置”为“当前位置”,如此重复直至到达

3、出口;若当前位置“不可通”,则应顺着“来的方向”退回到“前一通道块”,若该通道块的四周4个方块均“不可通”则应从当前路径删除该通道块。所谓“下一位置”指的是“当前位置”四周4个方向(东、南、西、北)上相邻的方块。以栈S来记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。所以即为“当前路径入栈”;“从当前路径上删除前一通道块”为“出栈”。在这个过程中可以输出迷宫所走通的路径,在这次课程设计中迷宫是由数组预先定义好的,不能由用户定义生成,可以加入随机函数,自动生成二维数组,还可以用户自己输入迷宫。关键词:栈;存储结构;数组 一、课题分析(1)该题目为迷宫求解。(2)此课题是对迷宫问题

4、的求解。包括用数组生成迷宫,显示输出路径因此,本程序设计共需设计一个主程序以及若干个子程序。(3)在本课程设计程序里,主程序主要是以一个mn的长方形表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对设定的迷宫,求出一条从入口到出口的通路,子程序实现迷宫地图的查看和通过迷宫后的路径查询。二、需求分析1. 主模块功能描述 显示提示语句提示用用户选择输入执行的功能。(1)开始迷宫求解游戏 (2)查询迷宫地图(3)查询通过迷宫后的路径 2. 子程序模块设计(1)迷宫求解游戏 输入1开始游戏(2)查询迷宫地图 在菜单中输入2查看迷宫求解的地图(3)查询通过迷宫后的路径 输入2查询通关路径三、设

5、计方案1.类设计构建一个Hidding类,并有私有成员:x坐标,y坐标,位置标志,初始方向;共有成员:PrintMap打印地图,GameFunction游戏主循环,Move_up向上移动,Move_down向下移动,Move_left向左移动,Move_right向右移动,IsGameOver判断游戏是否结束,Move_Keys接收移动的指令,InDirection相反方向输出,dir_flage方向标志,Hidding:Start()开始游戏等等类,在通过类的实现来执行相应的功能,具体代码如下:class Hiddingprivate: int point_x; /控制运动的点的x坐标 in

6、t point_y; /控制运动的点的y坐标 int flage; /判断标志 int direction; /初始方向public: Hidding(); int PrintMap(int mapHH); /打印地图 int GameFunction(int mapHH, SqStack &S);/游戏主循环 int Move_up(int mapHH,SqStack &S); /向上移动 int Move_down(int mapHH, SqStack &S); /向下移动 int Move_left(int mapHH, SqStack &S); /向左移动 int Move_right

7、(int mapHH, SqStack &S); /向右移动 bool IsGameOver(int mapHH); /判断游戏是否结束 int Move_Keys(int key, int mapHH, SqStack &S); /接收移动的指令 int InDirection(int key); /相反方向输出 int dir_flage; /方向标志 int Out(int mapHH);/显示通关路径 int Outa(int mapHH); int Hidding:menu();/菜单 int Hidding:Start();/开始游戏 ;2.程序模块设计设计方案与实施与总体设计思想

8、(1) 迷宫形状由0表示可通过,用1表示障碍。为方便用0,1输入,2表示起点,3表示终点。并把迷宫图形保存在二维数组Map中,而打印出的图形中“”表示能通过,“”表示障碍。对探索过的位置加以标记“”,起点和终点分别由“”,“”表示,“”表示为当前目标位置。(2) 根据二位字符数组和加标记的位置坐标,输出迷宫的图形。(3) 该程序在获取迷宫图形结构后,目标点从起点开始搜索可通过的路径,目标点通过判断身边上下左右四个位置是否有障碍而选择前进路径,如果判断之后遇到没有可以通过的方向,将会退回之前的位置,另行判断。直至目标点找到出口后,输出通过的路径,程序结束。1.2程序设计流程图入口出发,顺某一方向

9、向前探索,若能走通,则继续往前走;否则沿原路返回,换一个方向在继续探索,直至所有可能的通路都探索完为止。图1游戏的主循环 3. 主模块 若当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索,即切换为“下一位置”为“当前位置”,如此重复直至到达出口;若当前位置“不可通”,则应顺着“来的方向”退回到“前一通道块”,然后朝着除“来向”之外的其他方向继续探索;若该通道块的四周4个方块均“不可通”则应从当前路径删除该通道块。所谓“下一位置”指的是“当前位置”四周4个方向(东、南、西、北)上相邻的方块。以栈S来记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。所以即为“当前路径入

10、栈”;“从当前路径上删除前一通道块”为“出栈”。图2游戏的主框架3.1 子模块图3实现迷宫游戏地图查询后开始游戏3.程序调试结果及分析3.1 主菜单这是主界面,提示A、B、C各自代表的功能,输入1或2或3会跳转到相应的功能模块,输入1开始游戏,输入2可查看需要通关的游戏地图,输入3返回。 图4程序界面图3.2 功能A模块当从键盘输入1进入A功能模块,此图是寻找迷宫路径,游戏会由电脑自动完成,入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路返回,换一个方向在继续探索,直至所有可能的通路都探索完为止,若是成功找到路径,则输出恭喜过关,并且提示是否查看通关路径。图5程序正在运行图3.

11、3 功能B模块从键盘输入2查询迷宫地图,可显示游戏需要通关的迷宫地图,继续输入1可以开始游戏。图6迷宫地图 3.4 功能C模块游戏的主循环的类的实现表示游戏的开始,判断当前位置标记是否为3,如果为3,则表示该位置为终点,游戏结束,输出恭喜过关,提示是否查看通关路径,从键盘输入2查询通关路径 图7目标完成游戏路径图图四、详细设计1.用结构体构建栈 通过构建的栈实现迷宫求解时寻找路径的数据的存放于取出,其关键代码如下:typedef struct SElemType *top; /顶部指针 SElemType *base; /底部指针 int stacksize; /当前栈的大小SqStack;2

12、.构建类构建一个Hidding类,并有私有成员:x坐标,y坐标,位置标志,初始方向;共有成员:PrintMap打印地图,GameFunction游戏主循环,Move_up向上移动,Move_down向下移动,Move_left向左移动,Move_right向右移动,IsGameOver判断游戏是否结束,Move_Keys接收移动的指令,InDirection相反方向输出,dir_flage方向标志,Hidding:Start()开始游戏等等类,在通过类的实现来执行相应的功能,具体代码如下:class Hiddingprivate: int point_x; /控制运动的点的x坐标 int po

13、int_y; /控制运动的点的y坐标 int flage; /判断标志 int direction; /初始方向public: Hidding(); int PrintMap(int mapHH); /打印地图 int GameFunction(int mapHH, SqStack &S);/游戏主循环 int Move_up(int mapHH,SqStack &S); /向上移动 int Move_down(int mapHH, SqStack &S); /向下移动 int Move_left(int mapHH, SqStack &S); /向左移动 int Move_right(int

14、 mapHH, SqStack &S); /向右移动 bool IsGameOver(int mapHH); /判断游戏是否结束 int Move_Keys(int key, int mapHH, SqStack &S); /接收移动的指令 int InDirection(int key); /相反方向输出 int dir_flage; /方向标志 int Out(int mapHH);/显示通关路径 int Outa(int mapHH); int Hidding:menu();/菜单 int Hidding:Start();/开始游戏 ;3.用数组构建一个迷宫1.迷宫形状由0表示可通过,用

15、1表示障碍。为方便用0,1输入,2表示起点,3表示终点。并把迷宫图形保存在二维数组Map中,而打印出的图形中“”表示能通过,“”表示障碍。对探索过的位置加以标记“”,起点和终点分别由“”,“”表示,“”表示为当前目标位置,其关键代码如下:int mapHH = 1,1,1,1,1,1,1,1,1,1, /(9,0) (9,9) 1,0,0,0,0,0,1,0,0,1, 1,0,1,1,0,0,1,0,0,1, 1,0,0,1,1,0,1,0,1,1, 1,1,0,0,1,0,0,0,1,1, 1,1,0,1,1,1,1,0,0,1, 1,1,0,1,1,1,1,1,0,1, 1,0,0,1,1

16、,1,1,1,0,1, 1,2,1,1,1,1,1,1,3,1, 1,1,1,1,1,1,1,1,1,1 /(0,0) (0,9);2.打印出的图形中“”表示能通过,“”表示障碍。对探索过的位置加以标记“”,起点和终点分别由“”,“”表示,“”表示为当前目标位置,其关键代码如下:int Hidding:PrintMap(int mapHH) for (int i = 0; i H; i+) for (int j = 0; j H; j+) switch (mapij) case 0: cout ; break; case 1: /墙 cout ; break; case 2: /起点 cout

17、 ; break; case 3: /终点 cout ; break; case 7: /走过的路径 cout ; break; case 9: cout ; break; default: break; cout endl; return 0;/PrintMap4.游戏移动控制指令构建一个栈,用Key控制移动,上移指令Key=8,下移指令Key=5,左移指令Key=4,右移指令Key=6,其关键代码如下: int Hidding:Move_Keys(int key,int mapHH, SqStack &S) switch (key) case 8: Move_up(map,S); brea

18、k; case 4: Move_left(map,S); break; case 6: Move_right(map,S); break; case 5: Move_down(map,S); break; default: break; return 0;/Move_Keys5.游戏移动控制指令四个方向的实现以向上移动指令的实现为例,判断是否是走过的路径,若是则x-1当前位置标记为0;判断前方是否可行,若是x-1,当前位置标记为7,(7为走过的路径),并且入栈执行一次;若前方数组值为1,表示不能通过,继续判断其他方向是否可以通过,如mappoint_xpoint_y - 1 = 0则表示左侧可

19、以通过,direction=4,移动方向为左,入栈一次,其他方向的移动指令大致相同,都是先判断,在通过入栈实现移动游戏移动过程中若是未找到通路,需要返回,则执行InDirection反方向移动指令。其关键代码如下:int Hidding:Move_up(int mapHH,SqStack &S) if (mappoint_x - 1point_y = 7) mappoint_xpoint_y = 0; point_x -= 1; else if (mappoint_x - 1point_y = 0 & direction != 5) | mappoint_x - 1point_y = 3) /

20、如果前方可行 mappoint_xpoint_y = 7; point_x -= 1; Push(S, direction); if (mappoint_x - 1point_y = 1) if (mappoint_xpoint_y - 1 = 0) direction = 4; Push(S, direction); else if (mappoint_xpoint_y + 1 = 0) direction = 6; Push(S, direction); else dir_flage = Pop(S); InDirection(dir_flage); mappoint_xpoint_y =

21、 0; return 0;/Move_up6.游戏移动过程中若是未找到通路,需要返回的指令判断上一步执行的指令Key,在执行放方向移动的指令,具体代码如下:int Hidding:InDirection(int key) switch (key) case 8: direction = 5; break; case 4: direction = 6; break; case 5: direction = 8; break; case 6: direction = 4; break; default: break; return 0;/InDirection7.游戏的主循环用一个sleep函数控

22、制游戏的速度,具体代码如下:int Hidding:GameFunction(int mapHH, SqStack &S) Sleep(100); PrintMap(map); system(cls); while (!IsGameOver(map) mappoint_xpoint_y = 9; PrintMap(map); Move_Keys(direction, map,S); cout方向:; switch(direction) case 8: cout 上 endl; break; case 5: cout下; break; case 6: cout右; break; case 4:

23、cout左; break; cout direction endl; system(cls); Sleep(100); return 0;/GameFunction8.游戏的开始于结束游戏的主循环的类的实现表示游戏的开始,判断当前位置标记是否为3,如果为3,则表示该位置为终点,游戏结束,输出恭喜过关,提示是否查看通关路径,具体代码如下:int Hidding:Start() hid.GameFunction(map,S1); if (hid.IsGameOver(map) cout 恭喜过关! endl; cout输入2显示通关路径。endl; bool Hidding:IsGameOver(

24、int mapHH) if (mappoint_xpoint_y = 3) /3表示终点 return true; else return false;/IsGameOver9.迷宫地图的查看与通关后的路径查询开始游戏前可以查看迷宫的地图,在开始游戏寻找到通关路径后可以查看对应的路径,用for循环实现二维数组的读出,相应的通关路径会以符合标记出来,具体代码如下: for(int i=1;i=H;i+) for(int j=1;j=H;j+) if(mapij=0) coutmapij;五、设计总结 结论与心得本次课程设计题目为迷宫求解,通过该题目的设计过程,我们小组加深了对栈的逻辑结构,存储结

25、构及入栈出栈过程的理解,对栈的基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。本次课程设计,使我们对数据结构设计方法、步骤、思路,有一定的了解和认识,它相当于实际设计工作的模拟。在课程设计过程中,基本能按照规定的程序进行,先针对表达式算法为背景,建立系统模型:收集、调查有关资料,共同与老师和同学进行讨论、修改、再讨论、再修改,最后确定方案。一个人要完成所有的工作是非常困难和耗时的,我们小组都是分工合作,这样既锻炼了每个人,又学到了很多的知识。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很

26、多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我们小组收益很大,学到很多。心得体会:通过此次课程设计,使我更加了解了数据结构着方面的知识,在设计的过程中遇到了一些很难的问题,经过一遍一遍地思考,与同学和老师的交流中找到了问题原因的所在,也知道了自己在这方面的知识欠缺和经验不足。通过这次的课程设计,获得了很多宝

27、贵的经验,特别是怎么样通过理论与实践相结合,把书本上的内容应用到我们做的程序上去。学会了调试程序的一般方法,知道了如何在困难重重中一步一步发现问题,解决问题。 五、参考文献1 郑莉,董渊,何江舟.C+语言程序设计(第4版)M.北京:清华大学出版社,2010:1231452 蔚敏,吴伟民.数据结构(C语言版)M.北京:清华大学出版社(范素珍 白立军),2007:1421603 吕凤翥.C+语言程序设计(第3版)M.北京:电子工业出版社,2009:1511754 陈小玉.趣学算法 M.北京:人民邮电出版社(张涛),2017.8:103-1155 严蔚敏,吴伟民,米宁.数据结构题集M.北京:清华大学出版社,105115

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1