数据结构课程设计(迷宫问题).docx
《数据结构课程设计(迷宫问题).docx》由会员分享,可在线阅读,更多相关《数据结构课程设计(迷宫问题).docx(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、大连海洋大学理学院课程设课程设计实验报告实验报告迷宫问题程序的设计与实现迷宫问题程序的设计与实现一、需求分析1、问题描述问题描述:本实验是迷宫问题,取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个 出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步。老鼠经多次试验终于得到它学习走该迷宫的路线。设计一个计算机程序对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。2 2、基本要求:、基本要求:(1)一条通路的二元组(i,
2、j)数据序列,(i,j)表示通路上某一点的坐标。(2)用标志(如数字 8)在二维数组中标出该条通路,并在屏幕上输出二维数组。3 3、实现提示:、实现提示:(1)以二维数组 mazeij表示迷宫,其中 0mi,0nj,数组元素值为 1 表示该位置是墙壁,不能通行;元素值为 0表示该位置是通路。限定迷宫的大小m=n=9。假定从mg00出发,出口位于 mgmn,移动方向为顺时针的 8 个方向(东,东南,南,西南,西,西北,北,东北)。(2)以文件的形式输入迷宫的数据:文件中第一行的数据为迷宫的行数 m 和列数 n,从第 2 行至第 m+1 行为迷宫值;(3)若设定的迷宫存在通路,则以方阵形式及其通路
3、路径输出,若设定的迷宫不存在通路,则输出“没有可走路径”(4)用一种标志(本题设为 8)在二维数组中显示该条通路,并在屏幕上输出二维数组,本程序最终要求求出一条成功的通路二、概要设计2.12.1 类型的定义:类型的定义:typedef structint row;/行int col;/列int dir;/方向element;element stackMAX_STACK_SIZE;/存储走过的位置typedef structint vert;水平方向增量int horiz;垂直方向增量offsets;/记录八个方向(东,东南,南,西南,西,西北,北,东北)int mazeN+2N+2;/迷宫in
4、t markN+2N+2;/记录 maze 数组上的元素是否别访问过int EXIT_ROW,EXIT_COL;/定义找到出口时的行和列2.22.2 关系:关系:下图为下图为 pathpath()函数的流程图()函数的流程图主函数path()del()add()三、详细设计void path()int row,col,next_row,next_col,dir,found=FALSE;/分别为:当前位置行、列号,下一位置行、列号,遍历方向element position;int top=0;mark11=1;/标记初始位置stack0.row=1;/初始位置行号stack0.col=1;/初始
5、位置列号stack0.dir=0;/定义初始位置遍历方向move0.vert=1;move0.horiz=1;/八个方向具体设置move1.vert=0;move1.horiz=1;move2.vert=1;move2.horiz=0;move3.vert=-1;move3.horiz=1;move4.vert=1;move4.horiz=-1;move5.vert=-1;move5.horiz=0;move6.vert=0;move6.horiz=-1;move7.vert=-1;move7.horiz=-1;while(栈不为空且没找到路径)position=del(&top);/栈顶元素
6、出栈/将出栈元素作为当前位置row=position.row;col=position.col;dir=position.dir;while(八个方向没走完且没找到出路)next_row=row+movedir.vert;/下一位置行号next_col=col+movedir.horiz;/下一位置列号if(下一位置为终点)found=TRUE;当前位置入栈;终点入栈;else if(下一位置非墙且没走过)/标记“下一位置;”“当前位置”入栈;“当前位置”改为“下一位置”初始方向设为第一方向即(dir=0)else 遍历下一方向即(dir+)if(found)/int count=0;/记录节
7、点为输出路径上的第几个节点输出:找到路径!路径坐标如下:for(int i=0;i=top;i+)count+;/计数输出该节点坐标;if(count%5=0)printf(n);printf(nnn);int flag;/记录最后遍历方向的下一方向printf(具体路径为:n);for(i=1;iN+1;i+)for(int j=1;jN+1;j+)flag=-1;/初值if(栈中有该点坐标)flag=1;if(flag=-1)printf(%2d,mazeij);/该点不在路径上,输出else 输出栈中存储的上一方向printf(n);printf(nn);else printf(未找到路
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 迷宫 问题
限制150内