数据结构实验报告 题目:用栈解决迷宫问题 一.需求分析 1. 以结构体Maze 表示迷宫,其中pos 表示该位置是否有障碍; freq 记录该位置被经过的次数;数组move 表示下一步的方向。 2. 本程序自动随机生成一个12×12 大小的迷宫,字符“H”表示有障碍,空符表示通路。 3. 迷宫的入口为左上角,出口为右下角。 4. 本程序只求出一条成功的通路。 二.概要设计 为了实现上述操作,以栈为存储结构。 本程序包含三个模块: (1) 主程序模块:实现人机交互。 (2) 迷宫生产模块:随机产生一个12×12 的迷宫。 (3) 路径查找模块:实现通路的查找。 (4) 求解迷宫中一条通路的伪代码: do{ 若当前位置可同, 则{ 将当前位置插入栈顶; 若该位置是出口位置,则结束; 否则切换当前位置的东临方块为新的当前位置; } 否则{ 若栈不空且栈顶位置尚有其他方向未被探索, 则设定新的的当前位置为沿顺时针方向旋转找到的栈顶位置的下一相邻块 若栈不空但栈顶位置的四周均不可通, 则{ 删去栈顶位置; 若栈不空,则重新测试新的栈顶位置,直至找到一个可通的相邻块或出栈至栈空。 } } } while(栈不空) 三. 详细设计 栈的设计: typedef struct { Node *base,*top; int length; }Stack; Stack *initstack(); //初 始 化 栈 void printstack(Stack *s); //打 印 栈 Status destroy(Stack *); //销毁整个栈 Status deltop(Stack *s); //出栈 Status pushelem(Stack *,ElemType ,ElemType); //进栈 1. 主程序模块: int main() { printf("随机产生一个12×12 的迷宫,X 字符表示障碍,空符表示通路:\n"); Maze a[N][N]; makemaze(a); printf("输入回车键显示路径,*字符表示路径。\n"); getchar(); findpath(a); while(1); return 0; } 2. 迷宫生产模块; void makemaze(Maze (*p)[N]) { int i,j,conter; for(i=0;ipos=0; (*(p+i)+j)->freq=0; (*(p+i)+j)->move[0]=0; (*(p+i)+j)->move[1]=0; (*(p+i)+j)->move[2]=0; (*(p+i)+j)->move[3]=0; } for(j=0;jpos='X'; (*(p+N-1)+j)->pos='X'; } for(i=1;ipos='X'; (*(p+i)+N-1)->pos='X'; } srand((int)time(NULL)); for(conter=0;conter<20;++conter) { i=rand()%(N-2); j=rand()%(N-2);...