1、福州大学数计学院数据结构上机实验报告专业和班级:信息计算科学与应用数学 6 班学号 姓名 成绩实验名称 栈、队列 实验内容 利用栈实现迷宫求解实验目的和要求【实验目的】应用栈结构来解决应用问题,加深对栈结构特点的认识和应用。【基本要求】首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d 表示走到下一坐标的方向。如:对于下列数据的迷宫,输出的一条通路为;(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),问题描述和主要步骤【问题描述】以一个 mn 的长方阵表示迷宫
2、,0 和 1 分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论【程序设计】#include #include #include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2#define INIT_SIZE 100 /存储空间初始分配量#define INCREMENT 10 /存储空间分配增量#define MAXLEN 10/迷宫包括外墙最大行列数目typedef int Status;typedef struct /迷宫中
3、r 行 c 列的位置int r;int c;PostType;typedef structint ord; /当前位置在路径上的序号PostType seat;/当前坐标int di; /往下一坐标的方向SElemType; /栈元素类型typedef structSElemType* base;/栈基址,构造前销毁后为空SElemType* top;/栈顶int stackSize; /栈容量Stack; /栈类型Status InitStack(Stack if(!S.base)exit(OVERFLOW);/存储分配失败S.top=S.base;S.stackSize=INIT_SIZE
4、;return OK;/InitStackStatus StackEmpty(Stack S) /若 s 为空返回 TRUE,否则返回 FALSEif(S.top=S.base)return TRUE;return FALSE;/StackEmptyStatus Push(Stack if(!S.base)exit(OVERFLOW); /存储分配失败S.top=S.base+S.stackSize;S.stackSize+=INCREMENT;*S.top+=e;return OK;/pushStatus Pop(Stack e=*-S.top;return OK;/PopStatus De
5、stroyStack(Stack S.top=S.base;return OK;/DestroyStacktypedef structint r;int c;int adrMAXLENMAXLEN;/可取 0,1,2,3MazeType; /迷宫类型Status InitMaze(MazeType maze.r=9,maze.c=8; /迷宫行和列数for(i=0;imaze.r | start.cmaze.c)printf(“n 超过了数组的大小n“);continue;while(start.rmaze.r | start.cmaze.c);do /输入迷宫出口坐标printf(“n 输入
6、迷宫出口坐标:“);/(9,8)scanf(“%d,%d“,if(end.rmaze.r | end.cmaze.c)printf(“n 超过了数组的大小n“);continue;while(end.rmaze.r | end.cmaze.c);if(!MazePath(maze,start,end,Path)/迷宫求解printf(“n 无路可走!n“);elsePrintMaze(maze);/打印路径doPop(Path,e);printf(“-(%d,%d,%d)n“,e.seat.r,e.seat.c,e.di);while(!StackEmpty(Path);printf(“n 继续?(y/n): “);scanf(“%s“,while(cmd=y | cmd=Y);/main【测试数据】 迷宫的测试数据如下:左下角(1,1)为入口,右下角(9,8)为出口【结果截图】研究与探讨计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。说明:实验名称为教学大纲中各章的实验项目名称,实验内容为具体章节的实验内容名称