c语言迷宫最完整做法_第1页
c语言迷宫最完整做法_第2页
c语言迷宫最完整做法_第3页
c语言迷宫最完整做法_第4页
c语言迷宫最完整做法_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、H下径 如路 a 一路运 ;IJOH OB OOB on oo OH OOH BOH oo oooooo OOHOOBoooo o OOOBO ooo ooo o o 请按任意键继续 #include#include#include#define stacknit_sizc 200#define stackjncrenient 10#define ERROE 0#define TRUE 1#define FALSE 0#define OVERFLOW 0#define OK 1typcdef int Status;typcdef stnictint x;int y;PosTypc;typcde

2、f stmct int ord: /通道块在路径上得“序号”PosTypc seat; 通道块在迷宫中得坐标位It”int di;从此通道块走向下一通道块得“方向”SElcmlpc:typcdef stmct SElcmTypc *basc;SElcmTypc *top;int stacksize;JSqStack;int mg2020J;/*随机生成迷宫得函数/*为了能够让尽量能通过,将能通过得块与不能通过得块数量比大致为2:1 */void Random()int i,j,k;srand(time(NULL);mgl0=mgll=mg18 19=0;将入口、出口设置为“0”即可通过for(

3、j=0;j20;j 卄)mg0|jl=mg19j=l;/*设置迷宫外叶不可走,保证只有一个岀口与入口 */for(i=2;i19;i+)mgi0=mgi-l19=l;戶设置迷宫外围“不可泄,保证只有一个岀口与入口*/for(i=l;i19;i+)for(j=l;j top=s base;s、stacksize=stack_init_size;return OK:当前块可否通过Status Pass(PosT-pe e)if (mge xc、y=0) 0 时可以通过return OK;/如果当前位置就是可以通过,返回1return OVERFLOW;其它情况返回0留下通过得足迹Status Fo

4、olPrint(PosType e)mge xc、y=7;return OK:岀栈Status Pop(SqStack &s,SElcmTypc &c) if(Sx top=Sx base) return ERROE;一s、top;return OK:/压入栈Status Push(SqStack &s.SElemType e) if(s top-s base=Sx stacksize) basejs 、stacksize+stackncrcmcnt)s、 basc=(SElcmType *)realloc(s *sizeof(SElemType);if(!s、base)exit(OVERFL

5、OW); s top=s、basc+s、stacksize; s、stacksize+=stackjncrement;*s、top+=e: return OK:就是否空栈Status StackEmpty(SqStack s) if (Sx top=Sx base) return OK;return OVERFLOW;留下不能通过得足迹Status MarkPrint(PosType e)mge xc、y=3;return OK:)/下一步PosTypc NcxtPos(PosTypc &c,int dir)PosTypc E:switch(dir)case 1:E x=c、x; 向下Ex y

6、=e y+1;break:case 2:E x=c、x+1; 向右E、y=e y;break:case 3:E x=c、x; 向上E、y=e y-1;break;case4:E x=c、x-1; 向左E、y=e y;break;return E;/若迷宫maze中从入口 start到岀口 end得通道,则求得一条存放在栈中(从栈底到栈顶),并返回TRUE;否则返回FALSE/迷宫函数Status MazePath(int mg,PosTypc startTosType end.SqStack &s)PosTypc curpos;InitStack (s);SElcmTypc e;int cur

7、step;curpos=start; /设左当前位置”为”入口位斟 curstep=l;/ 探索第一步doif(Pass(curpos) 当前位置可通过,即就是未曾龙到过得通逍块FootPrint(curpos); / 留下足迹e、di =1;c、ord = curstep;c. seat= curpos;Push(s,e);加入路径 if(curposx x=cnd、x & curpos y=end y) printf(HniiOn_nO能到达终点!n路径如下:nj; return TRUE;curpos=NextPos(curpos, 1); /下一位置就是当前位置得东邻 curstep+

8、; / 探索下一步)else /当前位置不能通过if(!StackEmpty(s)Pop(s,c); while(Cx di=4&!StackEmpty(s)MarkPrint(e seat);Pop(sx);if(e. di4)c、di+;Push(sx);/留下不能通过得标记,并退回一步 curpos=NextPos(ex scat,e、di); /*当前位It设为新方向得相邻块*/ /if/if)/else while(! StackEmpty (s);printf(nii此迷宫不能走通! n”); return FALSE:)打印迷宫void PrintMaze()int ij;pri

9、ntf(运行路径:nn“); for(i=0;i20;i+) for(j=0;j20;j+) if(mgij=O)printf(,);/迷宫得“墙不通得路通过得路径eLse if(mgij=l) printf(HBH): else if(mgij=3) printf();else if(mgij=7) printf(o);)printf(HnH);printf(HnM);void main()SqStack S;PosTypc startxnd;start. x=l;start. y=0; 起点坐标 endx x=18;end. y=19; 终点坐标 RandomO;printf(HnnTest 1:M);MazePath(mg2020,start,end,S);PrintMaze();system(” pause”);Random();

温馨提示

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

评论

0/150

提交评论