版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、【完成题目3】迷宫求解【问题描述】以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。【基本要求】首先实现一个栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。【算法设计】本实验的目的是设计一个程序,实现手动或者自动生成一个nxm矩阵的迷宫,寻找一条从入口点到出口点的通路。我们将其简化成具体实验内容如下:选择手动或者自动生成一个nxm的迷宫,将迷宫的左上角作入口,右下角作出口,设“ 0 ”为通路,“1 ”
2、为障碍,即无法穿越。假设从起点出发,目的为右下角终点,可向“上、下、左、右、左上、左下、右上、右下”8个方向行走。如果迷宫可以走通,则用“”代表“1”,用“”代表“ 0”,用代表行走迷宫的路径。输出迷宫原型图、迷宫路线图 以及迷宫行走路径。如果迷宫为死迷宫,输出信息。可以二维数组存储迷宫数据,用户指定入口下标和出口下标。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。?本程序包含三个模块1) 主程序模块:void mai n()初始化;do 接受命令;处理命令; while ( 命令!= 退出);2) 栈模块实现栈抽象数据类型;3) 迷宫模块
3、一一实现迷宫抽象数据类型。【源代码】#include /库中包含 system(pause)和 rand()函数#includec语言里的库#include#include #define OK 1#define ERROR 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OVERFLOW -1#define M 49#define N 49using namespace std;int mazeMN;typedef int Status;typedef structint m,n,direc;MazeType,*LMa
4、zeType;typedef structLMazeType top;LMazeType base;int stacksize;int over;Stack;void lnit_hand_Maze(int mazeMN,int m,int n)int i,j;for(i=1;i=m+1;i+)for(j=1;jv=n+1;j+)mazeij=1;coutvv请按行输入迷宫,0表示通路,1表示障碍:vvendl;for(i=1;im+1;i+)for(j=1;jvn+1;j+)cinmazeij;for(i=1;ivm+1;i+)for(j=1;jvn+1;j+)if(mazeij!=0&maz
5、eij!=1)coutvv您输入有误,请重新输入;Init_hand_Maze(maze,m,n);自动生成迷宫void Init_automatic_Maze(int mazeMN,int m,int n)/int i,j;coutvn 迷宫生成中nn;system(pause);for(i=1;im+1;i+)for(j=1;jn+1;j+)mazeij=rand()%2;/随机生成 0、1void PrintMaze(int mazeMN,int row,int col)int i,j;coutvv迷宫如图所示.vvendl;for(i=1;i=S.stacksize)S.base=(L
6、MazeType)realloc(S.base,(S.stacksize+STACKINCREMENT) * sizeof(MazeType);if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;Status Pop(Stack & S,MazeType &e)if(S.top=S.base)return ERROR;e=*-S.top;return OK;Status MazePath(Stack &S,MazeType & e,int mazeM
7、N,int m,int n)doif(mazee.me.n=0)/0可通,1 不可通,2 为已走过Push(S,e);mazee.me.n=2;if(e.m=m&e.n=n)S.over=1;表示存满一条路径return OK;else e.n+;e.direc=0;来这一点时的方向,0右1下2左3上MazePath(S,e,maze,m,n);elseif(S.top!=S.base&S.over!=1)switch(e.direc) /回到上一位置并同时改变方向走下一步case 0:e.n-;e.m+;e.direc=1;break;case 1:e.m-;e.n-;e.direc=2;b
8、reak;case 2:e.n+;e.m-;e.direc=3; break;case 3:Pop(S,e); break;while(S.top!=S.base&S.over!=1);return OK;int PrintPath(Stack S,int mazeMN,int row,int col)if(S.top=S.base)coutn=n;cout此迷宫无解nn;return ERROR;MazeType e;while(S.top!=S.base)Pop(S,e);mazee.me.n=(e.direc+10);cout完成!endl;coutn=n;cout路径为:endl;in
9、t i,j;for(i=1;irow+1;i+)for(j=1;jcol+1;j+)switch(mazeij)case 0:cout”;break;case 1:cout”;break;case 2:coutvv糸;break;case 10:coutt ;break;case 11:coutJ ;break;case 12:coutj ;break;case 13:coutT;break;coutendl;cout入口 vvendl;cout完成!vvendl;return OK;int main()int i,m,n,mazeMN,cycle=O;while(cycle!=(-1)cou
10、tvv*n;欢迎进入迷宫求解系统n;coutvvcoutvvendl;coutvvcoutvv 1手动生成迷宫 n;coutvv 2自动生成迷宫 n;coutvv 3退出 nncoutvvcoutvvn;coutvv请选择你的操作:n;cini;switch(i)case 1:coutvvn 请输入行数:cinm;coutn;coutvv请输入列数:;cinn;while(m49)|(n49)nn;coutm;coutn;lnit_hand_Maze(maze,m,n);PrintMaze(maze,m,n);MazeType start,end;coutvv请输入起点 m n:start.m
11、start.n;start.direc=O;coutvv 请输入终点 m n:vvendl;cinend.mend.n;Stack S;coutvv 寻找路径vvendl;InitStack(S);MazePath(S,start,maze,end.m,end.n);PrintPath(S,maze,m,n);system(pause);coutvvnnPress Enter Contiue!n;getchar();否则一直执行while(getchar()!=n); /接受一个输入,当为回车时执行break跳出,接受数据break;case 2:coutvvn请输入行数:;cinm;cout
12、vvn;coutvv 请输入列数:;cinn;while(mv0|m49)|(nv0|n49)nn;coutvvn抱歉,你输入的行列数超出预设范围(0-49,0-49),请重新输入:coutvvn请输入行数:;cinm;coutvvn;coutvv请输入列数:; cinn; lnit_automatic_Maze(maze,m,n);PrintMaze(maze,m,n); coutvv请输入起点 m n:vstart.mstart.n;start.direc=O;coutvv请输入终点 m n:end.mend.n;coutvv 寻找路径vvendl;InitStack(S);MazePat
13、h(S,start,maze,end.m,end.n);PrintPath(S,maze,m,n);system(pause);coutvvnnPress Enter Contiue!n; getchar();while(getchar()!=n);break;case 3:cycle=(_1);break;default:coutvvn;coutvv 你的输入有误!n; coutvvnPress Enter Contiue!n;getchar();while(getchar()!=n);break;【结果截图】迷宫无解的情况欢迎进入迷宫求解系统请选择你的操作* 请输入行数J 30表示通路,1表示p早和:谄输入列数 3 请接行输入迷宫,0 10 0迷宫如图所示.请输入起点e n: 请输入终点e n: 寻找路径完成!-F_ : 惫 为f甲任 径亍口霜 路f入完请手动生成迷宫的情况宫宫 迷迷 成成 生生*一-一亠请选择你的操作,2请输入行数;4请输入列数:4 上宫生成中 口请输入起点m n:1 4请轴入终点* =3 1寻找路径 元成辛继键意 *- 任 丁口成按 J 、-宀譜自动生成迷宫的情况【收获及体会】1. 本次实验核心算法明晰,思路明确,易于实现。遇到的问题是,迷宫的外围若未设 置障
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中语文+《烛之武退秦师》《鸿门宴》对比阅读课件+统编版高一语文必修下册
- 快递公司岗位责任制度
- 意识形态两个责任制度
- 房地产责任制度
- 托运人法律责任制度
- 扶贫办信访责任制度
- 技术负责责任制度
- 拆违包保责任制度
- 换届风气监督责任制度
- 推行门前五包责任制度
- HIV感染者心理支持方案
- 配电箱设备防护维护技术方案
- 2026年苏州工业职业技术学院单招综合素质考试题库附答案
- 2025版《煤矿安全规程》解读
- 2026年安徽水利水电职业技术学院单招职业适应性考试题库及答案1套
- 采集动脉血课件
- 2025年江西省公务员考试行测真题解析试卷(含答案)
- 剧毒从业证摸拟考试及答案解析
- 西藏高标准农田施工方案
- 隧道施工环境监测方案
- 化学微格教学讲解
评论
0/150
提交评论