- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构程序设计课题
衡阳师范学院工科课程设计 -《数据结构》课程设计报告题 目:迷宫问题(栈) 学 号:1445013914450132 姓 名:鲁向阳 肖吟月 班 级:物联网班(1405) 指导教师:王杰老师 日 期: 2016年 6月 目录1概述31.1课程设计目的31.2开发环境31.3任务分配32需求分析42.1题目内容42.2设计思想说明42.3数据结构设计53算法的设计63.1定义坐标(X,Y):63.2定义方向:63.3定义/链表结点:63.4定义栈:73.5定义迷宫定义移动的4个方向:74各模块的伪码算法84.1根据输入产生一个8*8的迷宫:84.2探索路径函数:114.3输出迷宫145函数的调用关系图176.1自动生成迷宫运行情况187心得体会19参考文献20附 录201概述课程设计目的本次课程设计是迷宫求解问题,主要是模拟从入口到出口的通路。程序中的数据采取的是“栈”作为数据的逻辑结构,并且使用链式存储结构,即是实现一个以链表作存储结构的栈类型。本课程设计实现了链栈的建立,入栈,出栈,判断栈是否为空的方法,关键的是迷宫通路路径的“穷举求解”和递归求解的方法。开发环境具有Intel酷睿i3处理器且满足以下要求的计算机:4GB 内存,500GB 硬盘;安装Visual C++ 6.0。任务分配两人一起查找相关资料,整合并进行探讨。其中一人通过查找的资料先行拟定文件的大纲,初步定稿后,然后再由另一个人进行进一步加工,细化,最后两人一起核实文件,进行进一步的升华,最终完成该任务。2需求分析题目内容以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。设计思想说明计算机解迷宫通常用的是“穷举求解”方法,首先从迷宫的入口开始,如果该位置就是迷宫出口,则已经找到了一条路径,搜索工作结束。否则从入口出发,顺着某个方向进行探索,若能走通,则继续往前进,否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设的迷宫没有通路。可以用二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置均可约定有东、南、西、北四个方向可通。要实现上述算法,需要用到栈的思想。栈里面压的是走过的路径,若遇到死路,则将该位置在栈的顶层)弹出,再进行下一次判断;若遇到通路,则将该位置压栈并进行下一次判断。如此反复循环,直到程序结束。此时,若迷宫有通路,则栈中存储的是迷宫通路坐标的倒序排列,再把所有坐标顺序排列好后,即可得到正确的迷宫通路。数据结构设计(1)以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。迷宫的四周有一圈障碍。(2)程序输出的结果以三元组(i,j,di)的形式输出,其中:(i,j)指示迷宫中的一个坐标,di表示走到下一坐标的方向,di的取值为0、1、2、3分别表示北、东、南、西。(3)若设定的迷宫存在通路,则以方阵形式将迷宫及其通路输出到标准输出文件上,对于迷宫中的每个方块,有上下左右4个方块相邻,第i行第j列的当前方块的位置记为(i,j),规定上方方块为方位0,并按顺时针方向递增编号。在试探过程中,假设按从方位0到方位3的顺序查找下一个可走的方块。(4)先将入口进栈(其初始方位设置为-1),在栈不空时循环:取栈顶方块(不退栈),若该方块是出口,则输出栈中所有方块即为路径,否则,找下一个可走的相邻方块,若不存在这样的方块,说明当前路径不可能走通,则回溯。也就是恢复当前方块为0后退栈;若存在这样的方块,则将这个可走的相邻方块进栈(其初始方位设置为-1)。3算法的设计定义坐标(X,Y)#includeiostream#includefstreamusing namespace std;struct Coor{int row;int column;int direction;}; 定义方向struct Move{int row;int column;};定义/链表结点struct LinkNode{Coor data;LinkNode *next;};定义栈class stack{private:LinkNode *top;public:stack(); ~stack();void Push(Coor data);Coor Pop();Coor GetPop();void Clear();bool IsEmpty();};定义迷宫定义移动的4个方向Move move[4]={{0,1},{1,0},{0,-1},{-1,0}};6、几个函数功能的描述: stack(); //构造函数
文档评论(0)