1 / 17
文档名称:

用栈方法、队列方法求解迷宫问题.doc

格式:doc   大小:102KB   页数:17页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

用栈方法、队列方法求解迷宫问题.doc

上传人:fangjinyan2017001 2019/12/11 文件大小:102 KB

下载得到文件列表

用栈方法、队列方法求解迷宫问题.doc

相关文档

文档介绍

文档介绍:目录1前言 12需求分析 13概要设计 24详细设计 35测试分析 66课程设计总结 7参考文献 8致谢 8附录(程序代码实现) 91前言设计一个简单迷宫程序,从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达,则到达新点,否则试探下一方向;若所有方向均没有通路,则沿原点返回前一点,换下一个方向在继续试探,直到所有可能的通路都探索到,或找到一条通路,或无路可走又返回到入口点。并利用两种方法实现:一种用栈实现,另一种用队列实现。、解决一些具有一定综合性问题的专业课题。通过课程设计(论文),提高学生综合运用所学知识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。,求出一条走出迷宫的路径,输出迷宫并将所求路径输出。要求用两种方法实现:一种用栈实现,另一种用队列实现。,(1)WINDOWS2000/2003/XP/7/Vista系统(2)VisualC++(1)迷宫类型设迷宫为M行N列,利用maze[M][N]来表示一个迷宫,maze=0或1,其中0表示通路,1表示不通。当从某点试探是,中间点有8个不同点可以试探,而四个角有3个方向,其他边缘点有5个方向,为使问题更容易分析我们用maze[M+2][N+2]来表示迷宫,而迷宫四周的值全部为1。定义如下:#defineM6/*迷宫的实际行*/#defineN8/*迷宫的实际列*/intmaze[M+2][N+2];(2)队列的类型定义队列的有关数据结构、试探方向等和栈的求解方法处理基本相同。不同的是:如何存储搜索路径。在搜索过程中必须几下每一个可到达的坐标点,以便从这些点出发继续向四周搜索。到达迷宫的出口点(m,n)后,为能够从出口沿搜索路径回溯直至入口,对于每一点,记下坐标点的同时,还要记下到达该点的前驱点,因此用一个结构体数组ele[MAX]作为队列的存储空间,因为每一点至少被访问一次,所以MAX至多等于m*n。该结构体有三个域:x、y和pre。其中x、y分别为所到达点的坐标,pre为前驱点在elem中的下标。除此之外,还需设定头、尾指针,分别指向队头,队尾。类型定义如下:typedefstruct//队的相关类型定义{intx,y;intpre;}Elemtype;typedefstruct//队列的类型定义{Elemtypeelem[MAXSIZE];intfront,rear;intlen;}SqQueue;(),利用队列实现迷宫求。定义函数DLmazepath(),实现队列的迷宫路径输出。定义函数InitQueue(),实现队列的初始化。定义函数QueueEmpty(),判断队列是否为空,为空返回1,(SqQueueq,Elemtype*e),实现队头元素的读取。定义函数EnQueue(SqQueue*q,Elemtypee),实现入队操作。定义函数DeQueue(SqQueue*q,Elemtype*e),实现出队操作。定义函数Sprint(inta[M+2][N+2]),实现,迷宫的输出。4详细设计(1)主函数voidmain(){inta,i,j,maze2[M+2][N+2];/*构造一个迷宫*/intmaze[M+2][N+2]={{1,1,1,1,1,1,1,1,1,1},{1,0,1,1,1,0,1,1,1,1},{1,1,0,1,0,1,1,1,1,1},{1,0,1,0,0,0,0,0,1,1},{1,0,1,1,1,0,1,1,1,1},{1,1,0,0,1,1,0,0,0,1},{1,0,1,1,0,0,1,1,0,1},{1,1,1,1,1,1,1,1,1,1}};itemmove[8]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};/*坐标增量数组move的初始化*/为使得程序更加人性化,更加友好,因此可将系统输出界面设置如下:printf("|*****************迷宫求解系统*****************|\n"); printf("|1、栈方法求解迷宫的路径|\n"); printf("|2、队列求解的迷宫路径|\n"); printf("|3、退出系统|\n");printf("|****