3.3迷宫问题.docx_第1页
3.3迷宫问题.docx_第2页
3.3迷宫问题.docx_第3页
3.3迷宫问题.docx_第4页
3.3迷宫问题.docx_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告题目:迷宫问题迷宫四周设为墙;无填充处为可通达处。设每个点有四个可通方向,分别为东南西北。左上角为入口,右下角为出口。迷宫有一个出口,一个入口。设计程序求解迷宫的一条通路。算法:#include#include#define MaxSize 15/定义迷宫的最大行列数为15using namespace std;int MazeMaxSizeMaxSize;int curstep=1;struct Locateint x;/横坐标属性xint y;/列坐标属性y;struct SElemint ord;Locate seat;int d;/方向属性d(03分别表示东南西北); struct SqStackSElem *base;SElem *top;int stacksize;int InitStack(SqStack *S)(*S).base=(SElem *)malloc(10*sizeof(SElem);if(!(*S).base)exit(0);(*S).top=(*S).base;(*S).stacksize=10;return 1;int StackEmpty(SqStack S)if(S.top=S.base)return 1;elsereturn 0;int Push(SqStack *S, SElem e)if(*S).top-(*S).base=(*S).stacksize)(*S).base=(SElem *)realloc(*S).base , (*S).stacksize+2)*sizeof(SElem);if(!(*S).base)exit(0);(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+=2;*(*S).top)+=e;return 1;int Pop(SqStack *S,SElem *e)if(*S).top=(*S).base)return 0;*e=*-(*S).top;return 1;int Pass(Locate b)if(Mazeb.xb.y=0)return 1;elsereturn 0;void FootPrint(Locate a)Mazea.xa.y=curstep;Locate NextLocate(Locate c,int d)Locate move4=0,1,1,0,0,-1,-1,0;/把东南西北依次编号为0、1、2、3放在增量数组move4中c.x+=moved.x;c.y+=moved.y;return c;void MarkPrint(Locate b)Mazeb.xb.y=-1;/定义迷宫不能通过路径为-1 int Mazepath(Locate start,Locate end) SqStack S;Locate curloc;SElem e;InitStack(&S);curloc=start;doif(Pass(curloc)FootPrint(curloc);e.ord=curstep;e.seat.x=curloc.x;e.seat.y=curloc.y;e.d=0;Push(&S,e);curstep+;if(curloc.x=end.x&curloc.y=end.y)/到达出口 return 1;curloc=NextLocate(curloc,e.d);elseif(!StackEmpty(S)Pop(&S,&e);curstep-;while(e.d=3&!StackEmpty(S)MarkPrint(e.seat);/不能通过的路径标记为-1Pop(&S,&e);/后退一步 curstep-;if(e.d3)/若还没向北探索 e.d+;Push(&S,e);curstep+;curloc=NextLocate(e.seat,e.d);while(!StackEmpty(S);return 0; void PrintMaze(int x,int y)for(int i=0;ix;i+)for(int j=0;jy;j+)coutsetw(4)leftMazeij;coutendl;int main()Locate begin,end;int i,j,x,y,x1,y1;coutxy;for(i=0;ix;i+)/定义墙元素值为1Maze0i=1;Mazex-1i=1;for(j=1;jy-1;j+)Mazej0=1; Mazejy-1=1;for(i=1;ix-1;i+)for(j=1;jy-1;j+)Mazeij=0;/定义可通过路径为0coutj;cout请依次输入迷宫内部每个“障碍物”所在的行列数:endl;for(i=1;ix1y1;Mazex1y1=1;/定义墙的值为1cout迷宫结构如下:endl;PrintMaze(x,y);cout请输入起点和终点所在行列数:begin.xbegin.yend.xend.y;/*begin.x=1;begin.y=1;end.x=x-2;end.y=y-2;/定义起点与终点位置*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论