数据结构迷宫问题实验报告_第1页
数据结构迷宫问题实验报告_第2页
数据结构迷宫问题实验报告_第3页
数据结构迷宫问题实验报告_第4页
数据结构迷宫问题实验报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、操作结果:若栈不为空,用 e返回栈顶元素,并删除栈顶元素©拴专年人字址亿git£rtjufy,fetiiin"Wnmrbfirfifrwnidll«lK«mnuvKortMn»i数据结构与算法设计迷宫问题实验报告实验二专业:物联网工程班级:物联网1班学号:姓名:刘沛航实验目的本程序是利用非递归的方法求出一条走出迷宫的路径,并将路径输出。首先由用户输入一组二维数组来组成迷宫,确认后程序自动运行,当迷宫有完整路径可以通过时,以。和1所组成的迷宫形式输出,标记所走过的路径结束程序;当迷宫无路径时,提示输入错误结束程序。二、实验内容用一个m*

2、m长方阵表示迷宫,。和1分别表示迷宫中的通路和障碍。设计一个程序对于任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。三、程序设计1、概要设计(1)设定栈的抽象数据类型定义ADTStack数据对象:D=aiai属于CharSet,i=l>2n,n>=0)数据关系:R=<ai-1,ai>ai-1,ai属于D,i=2,3,n基本操作:InitStack(&S)操作结果:构造一个空栈Push(&S,e)初始条件:栈已经存在操作结果:将e所指向的数据加入到栈s中Pop(&S,&e)初始条件:栈已经存在Getpop(&S,&

3、amp;e)初始条件:栈已经存在操作结果:若栈不为空,用e返回栈顶元StackEmpty(&S)初始条件:栈已经存在操作结果:判断栈是否为空。若栈为空,返回1,否则返回0Destroy(&S)初始条件:栈已经存在操作结果:销毁栈sADTStack(2)设定迷宫的抽象数据类型定义ADTyanshu数据对象:D=ai,j|ai,j属于、',0<=i<=M,0<=j<=N数据关系:R=ROW,COLR0W=<ai-l,j,ai,j>|ai-l,j,ai,j属于D,i=l,2,M,j=0,1,NC0L=<ai,j-1,ai,j>|

4、ai,j-1,ai,j属于D,i=0,1,Mj=l,2,N基本操作:InitMaze(MazeType&maze,intaCOL,introw,intcol)初始条件:二维数组intaCOL,已经存在,其中第1至第行,每行自第1到第n-l列的元素已经值,并以值0表示障碍,值1表示通路。操作结果:构造迷宫的整形数组,以空白表示通路,字符'表示障碍在迷宫四周加上一圈障碍MazePath(Amaze)初始条件:迷宫maze已被赋值操作结果:若迷宫maze中存在一条通路,则按如下规定改变Getpop(&S,&e)maze的状态;以字符,*,表示路径上的位置。字符,0表示

5、,死胡同;否则迷宫的状态不变PrintMaze(M)初始条件:迷宫M已存在操作结果:以字符形式输出迷宫)ADTmaze(3)本程序包括三个模块a、主程序模块voidmain()初始化;构造迷宫;迷宫求解;迷宫输出;)b、栈模块一一实现栈的抽象数据类型C、迷宫模块一一实现迷宫的抽象数据类型2、详细设计(1)坐标位置类型:typedefstructintrow;.的列P°sType先呢,想自己读入数据的,回来发现那样,很麻烦,所以还是事先定义一个迷宫。2 .栈的元素类型一开始有点迷惑,后来就解决了3 .本题中三个主要算法;InitMaze,MazePath和PrintMaze的时间复杂度

6、均为0(m*n)本题的空间复杂度也是0(ni*n)清辐入迷宫的Hk初微增布卜惨储忏格隔H). 3涉夜或皆到£注全:- Xi.建立迷宫:2 .通过1功能建立8水8的迷宫后,通过2功能继续建立迷宫内部:PWSERSXPEKAPDESfCJQG 中烹。ebuglMazaexb244342364 k3L O246 b7r- o35五、用户使用说明1.本程序运行在windows系列的操作系统下,执行文件为:。六、程序运行结果n昔A人建言河丁射|夕怯?2清人迷m内暗单儿赦2迷自结构如下脸入迷宫的血点/-1.511r出结臬o退出'GAU5ER5PEKAI-n.DfSlt-fDcbug

7、9;Maze.cxc'-XRf暮林*工口tx*富富押|&壬两5拐.潢沛IW杠工迄事*冲c富士*1请辙a宫的醵,婕刃青输入迷宫内墙单元数宫蹴如下瑚人迷宫的3和终点踹出结果磋出精选俾2诗输人述目内雷金兀熟10话低枚辅人此旨n堆乐卜单元刿亍就列皱左梏廉开:愉越拼音轴人法分;通过建立自己设定单元数目建立迷宫内墙。3 通过3功能观察已建立的迷宫结构:lCMJSERSPEKAHDESKTOFM2文冲知DcbuglMa.exe'-Xty/卜八,mttt序瞒区BJE17011:刻沛醺*m*"八1mrt:请带人建宫的厅曲列数乖符人迷言刁培单元数3迷宫结砌如下南人迷'言的

8、起点和终盛5金出结果。退出u o« o o o o n0 0 0 0 0防航窿之的建言u 1L 1x AV 11O 1 O 1 O0 01 00 01 00 01 01 00 0定义墙元君值为q可通过路径为LW拉拼音新法全:S1T4 通过4功能确立迷宫起点和终点:(此处像我们随机选择4,4和2,7分别为起点终点)TMJRJEKAHkPESKTOP.JtXPtljuflWazrjeKe,澹输小事宜的行敢列数2请输入讲盲内埼阜厂抑卷恂如下嫌人迷宫的起点和线点瞬I出结卑嗡出谨型军4请搐人起点的荷毁列触请箍A撰点的彳亍觌列热5执行5功能,判断是否有路径走出迷宫:九其丈尊富心龙4富砂富草*鼻珀

9、*|(土c*鼻塞轴护匚刚及耳1518011g勿沛百丁席皿*4*杆4事蝉事事事一常就常昌却1请输入译宜的行教力法2请翰心带有内垢阜厂曲卷恂如下婚商人迷宫的起点和终点瞄出结甲嗡出脱挥5也让手殳肓从人口到出TI的斑良谢激彳复用刘耻世卷序愉X退注肚越拼音输A壅全:这种情况无法走出迷宫。我们再次观察图像设4,4和1,6分别为起点终点,再运行5功能1P却JSERSIPEKAHIPES灯。:诸建立件却gbuq,.M丑乐珈才一口X中首铲时亨皆存中的Hn+r宣|耳黄1|耶-巧邙。1L吕刘帝亍航十畲才申巧什曾叫i甘杆尸忡想冲申齐1请输入迷宫潮亍致歹1黄时输入趁宫内墙单元甑制有亡构划-曲人注宫的起点和棘点5输出纯蛊

10、滤出遣逛择-1情输入起蔬的厅叙理撩(交儡4+厂14青输入络点BW纵列勖佐榕隔开L(;:二匕,二工C:二二,秀辛一二:二U二U:;丫3二:?Y'3X151EO11F刘沛沉二请输入运颔!行数,猫2请朝人运富力精单元数3法宫结构加不砸入迷者的仙fe和终点司输出结果调出帕W吉从入口到匚口的T芮金如下,谢诧使帮麻抗生程序0 C c 0 0 0014111000150n-10 ie01710101100 I fl II0 «观察到可以成功解开迷宫步数从1依次开始七、程序清单#includeO#includeOttincludeO#includeOase=(SElemType*)mallo

11、c(STACK_INIT_SIZE*sizeof(SElemType);if(!(*S).base)exit(0);(*S).top=(*S).base;tacksize=STACK_INIT_SIZE;return1;op-(*S).base>=(*S).stacksize)ase=(SElemType*)realloc(*S).base,(*S).stacksize+STACKINCREMENT)*sizeof(SElemType);if(!(*S).base)exit(O);(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+二STAC

12、KINCREMENT;)*(*S).top)+=e;return1;op=(*S).base)return0;*e=*一一(*S).top;+二direcdi.y;returnc;/使迷宫m的b点的序号变为-1(不能通过的路径)voidMarkPrint(PosTypeb)(m/若迷宫maze中存在从入口start到出口end的通道,则求得一条/存放在栈中(从栈底到栈顶),并返回1:否则返回0intMazePath(PosTypestart,PosTypeend)(SqStackS;PosTypecurpos;SElemTypee;InitStack(&S);curpos=start;

13、do(if(Pass(curpos)/当前位置可以通过,即是未曾走到过的通道块Footprint(curpos);/留下足迹=curstep;Push(&S,e);/入栈当前位置及状态curstep+;/足迹加1/到达终点(出口)return1;curpos=NextPos(curpos,;else/当前位置不能通过if(!StackEmpty(S)Pop(&S,&e);/退栈到前一位置curstep;while=3&&!StackEmpty(S)/前一位置处J,最后一个方向MarkPrint;留F不能通过的标记(-1)Pop(&S,&e

14、);退回一步curstep;if<3)/没到最后一个方向(北)+;换下一个方向探索Push(&S,e);curstep+;/设定当前位置是该新方向上的相邻块curpos=NextPos,;while(!StackEmpty(S);return0;/输出迷宫的结构voidPrint(intx,inty)inti,jfor(i=0;i<x;i+)(for(j=0;j<y;j+)printfC%3d",mij);printf(n);voidmain()PosTypebegin,end;inti,j,x,y,xl,yl,n,k;dosystem(cls")

15、;/清屏函数printf* *求水nnn);printf(z,printf(z,printf("printf("printf("printf(z,printf Cnn 请选择");scanf("%d", &n);刘沛航1请输入迷宫的行数,列数n);2请输入迷宫内墙单元数n);3迷宫结构如下n");4输入迷宫的起点和终点n);5输出结果n);0退出n);switch(n)case1:printf(请输入迷宫的行数,列数(包括外墙):(空格隔开);scanf("%d%d,&x,&y);for(i

16、=0;i<x;i+)/定义周边值为0(同墙)(m0i>0;/迷宫上面行的周边即上边墙mx-li=0;/迷宫下面行的周边即下边墙for(j=l;j<y-l;j+)mjO=O;/迷宫左边列的周边即左边墙mjy-l=O;/迷宫右边列的周边即右边墙for(i=l;i<x-l;i+)for(j=l;j<y-l;j+)mij=l;/定义通道初值为1break;case2:printf(请输入迷宫内墙单元数:);scanf(d”,&j);printfC请依次输入迷宫内墙每个单元的行数,列数:(空格隔开八n);for(i=l;i<=j;i+)scanf(“%d%d,&xl,&yl);mxlyl=0;)break;case3:Print(x,y);printfC刘沛航建立的迷宫,定义墙元素值为0,可通过路径为匕输入0退出");scanf("%d",&k);break;case4:printf(请输入起点的行数,列数:(空格隔开)

温馨提示

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

评论

0/150

提交评论