迷宫求解课程设计报告.docx
《迷宫求解课程设计报告.docx》由会员分享,可在线阅读,更多相关《迷宫求解课程设计报告.docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构实验报告题目:迷宫问题姓名学号任务分配孙盛问题分析罗剑代码实现杨滢钢论文编写一 需求分析1 以结构体Maze表示迷宫,其中BuideMaze调用建立迷宫;Seat用来记录迷宫坐标;SqTack用来记录当前路径;数组;SElemType表示当前位置; Display用于显示栈中所有元素;BuideMaze用于根据用户要求建立一个迷宫地图。2 本程序根据需要产生一个迷宫,0表示有障碍,1表示通路;MazePath为求解迷宫。3 迷宫的入口为左上角,出口为右下角。4 本程序只求出一条成功的通路。 二 概要设计为了实现上述操作,以栈为存储结构。本程序包含三个模块:(1) 主程序模块:实现人机交
2、互。(2) 迷宫生产模块:根据需要产生一个迷宫模型。(3) 路径查找模块:实现通路的查找。(4) 求解迷宫中一条通路的伪代码:do 若当前位置可同, 则将当前位置插入栈顶;若该位置是出口位置,则结束;否则切换当前位置的东临方块为新的当前位置; 否则若栈不空且栈顶位置尚有其他方向未被探索,则设定新的的当前位置为沿顺时针方向旋转找到的栈顶位置的下一相邻块若栈不空但栈顶位置的四周均不可通,则 删去栈顶位置; 若栈不空,则重新测试新的栈顶位置,直至找到一个可通的相邻块或出栈至栈空。 while(栈不空)三详细分析与源程序#include #include #include #define STACK_
3、INIT_SIZE 100 /初始栈大小 #define STACKINCREAMENT 10 /添加栈的长度 #define SIZE_OF_MAPH 20 /迷宫高度 #define SIZE_OF_MAPW 20 /迷宫长度 / MazeCell功能:用来描述迷宫组成单元的信息 typedef struct int Pass; / Pass: 当Pass为1时,表示导通块;为0则表示障碍块; bool Footprint; / Footprint: 当 Footprint为1时,表示留下足迹,反之,表示未经此地。 MazeCell; / SElemType功能: 此为栈的元素,用来表示当
4、前位置,(栈用来描述当前路径) typedef struct int ord; / ord: 通道块的序号int x; / x : 当前位置的横坐标int y; / y : 当前位置的纵坐标int di; / di : 搜索方向 1向东,2向南,3向西,4向北SElemType; / SqTack功能: 此为栈,用来记录当前路径typedef struct SElemType *base; / *base 栈底指针,指向起点SElemType *top; / *top 栈顶指针,指向路径的末点int stacksize; / stacksize 栈的容量SqStack; / Seat功能: 用
5、来记录迷宫坐标,此结构体为中间变量,纯粹为方便编程而建立typedef struct int x; / x: 用来记录横坐标int y; / y: 用来记录纵坐标Seat; / InitStack功能: 此函数用于初始化一个栈bool InitStack(SqStack &S) / 函数参数: SqStack &S / 函数返回值类型: boolS.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!S.base) return 0; S.top=S.base; S.stacksize=STACK_INIT_SIZE;
6、 return 0; / BuideMaze功能: 此函数的功能是用于根据用户要求建立一个迷宫地图,将用户输入的/ 整形数组形状给迷宫数组 / 函数参数: MazeCell MapSIZE_OF_MASIZE_OF_MAP/ Seat &start 起点坐标 / Seat &end 终点坐标/ 函数返回值类型: bool 建立成功则返回1,反之返回0。VoidBuideMaze(MazeCellMapSIZE_OF_MAPHSIZE_OF_MAPW,int maSIZE_OF_MAPHSIZE_OF_MAPW) for(int i=0;iSIZE_OF_MAPH;i+) for(int j=0
7、;j=S.stacksize) S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(SElemType); if(!S.base) return 0; S.top=S.base+S.stacksize; S.stacksize=S.stacksize+STACKINCREAMENT; *S.top+=e; return 1; bool Pop(SqStack &S,SElemType &e)/栈取出最上面的元素,将值给e if(S.base=S.top)return false; S.top-; e=*
8、S.top; return true; / NextPos功能: 此函数用于将坐标为x,y位置的di方向位置切换为当前位置。/ Seat curpos 当前坐标, int di 方向,int x,y 坐标,函数返回值类型: 无void NextPos(int x,int y,Seat &curpos,int di) if(di=1) curpos.y=y+1; curpos.x=x; else if(di=2) curpos.x=x+1; curpos.y=y; else if(di=3) curpos.y=y-1; curpos.x=x; else if(di=4) curpos.x=x-1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 迷宫 求解 课程设计 报告
限制150内