首页 C语言数据结构迷宫问题

C语言数据结构迷宫问题

举报
开通vip

C语言数据结构迷宫问题#include#include#include#defineM20#defineN20#definevisited2#defineTRUE1#defineFALSE0#defineINITSIZE100typedefintStatus;typedefstruct{//坐标点结构体inty;//每个可通的行坐标intx;//每个可通的列坐标}PosType;typedefstruct{intord;//通道块在路径上的“序号”intdi;//从此通道块走向下一通道块的“方向”PosTypeseat;//通道块在迷宫...

C语言数据结构迷宫问题
#include#include#include#defineM20#defineN20#definevisited2#defineTRUE1#defineFALSE0#defineINITSIZE100typedefintStatus;typedefstruct{//坐标点结构体inty;//每个可通的行坐标intx;//每个可通的列坐标}PosType;typedefstruct{intord;//通道块在路径上的“序号”intdi;//从此通道块走向下一通道块的“方向”PosTypeseat;//通道块在迷宫中的“坐标位置”}MazeNode;//迷宫节点typedefstruct{MazeNodebase[INITSIZE];inttop;//栈顶指针}Stack;typedefstruct{//用于存储迷宫的路径PosTypecoor[INITSIZE];inttop;随机生成迷宫初始化栈判断栈是否为空判断栈是否满了判断栈是否满了}Postion;voidRandMatrix();//intInitStack(Stack*);//intInitStack1(Postion*);intStackEmpty(Stack*);//intStackEmpty1(Postion*);intStackIsFull(Stack*);//intStackIsFull1(Postion*);//压栈intPush(Stack*s,MazeNodem);//intPush1(Postion*,PosType);intPop(Stack*s,MazeNode*m);//出栈intPop1(Postion*,PosType*);intDestroyStack(Stack*s);//撤销栈intPass(PosTypepos);//判断指定坐标是否可通过intFootPrint(PosTypepos);//标记能通过的PosTypeNextCoord(PosTypepos,inti);//获取下一位置intMarkPrint(PosTypepos);//留下不能通过的标记,并退回一步intMazePath(PosTypestart,PosTypeend,Postion*);//从迷宫的入口到出口查找voidPrintMaze(Postion*);//输出迷宫intmg[M][N];//生成一个M*N的迷宫intmain(){inth=1;PosTypestart,end;PostionP;while(h){printf("创建迷宫\n");InitStack1(&P);RandMatrix();printf("\n");printf("1、重新生成迷宫,0、就这个:");scanf("%d",&h);}do//输入迷宫入口坐标{printf("\n输入迷宫入口坐标");scanf("%d%d",&start.x,&start.y);if(start.x>N||start.y>M){printf("输入的坐标越界,请重新输入!\n");continue;}}while(start.x>N||start.y>M);do//输入迷宫出口坐标{printf("\n输入迷宫出口坐标:");scanf("%d%d",&end.x,&end.y);if(end.x>N||end.y>M){{printf("输入的坐标越界,请重新输入!\n");continue;}}while(end.x>N||end.y>M);if(!MazePath(start,end,&P))//调用函数查找路径{printf("\n无法通过!\n");}else{PrintMaze(&P);//打印找到的路径}return0;}intInitStack(Stack*s){s->top=-1;return1;}intInitStack1(Postion*s){s->top=-1;return1;}intStackEmpty(Stack*s){if(s->top==-1)return1;return0;}intStackEmpty1(Postion*s){if(s->top==-1)return1;return0;}intStackIsFull(Stack*s){if(s->top==INITSIZE-1)return1;elsereturn0;}intStackIsFull1(Postion*s)if(s->top==INITSIZE-1)return1;elsereturn0;}intPush(Stack*s,MazeNodem){if(!StackIsFull(s)){s->top++;s->base[s->top]=m;}return1;}intPush1(Postion*s,PosTypem){if(!StackIsFull1(s)){s->top++;s->coor[s->top]=m;}return1;}intPop(Stack*s,MazeNode*m){if(s->top!=-1){*m=s->base[s->top];s->top--;return1;}return1;}intPop1(Postion*s,PosType*m){if(s->top!=-1){*m=s->coor[s->top];s->top--;return1;}return1;}intDestroyStack(Stack*s)s->top=-1;return1;{}可通标记能通过的mg[pos.y][pos.x]=2;//2表示可通return1;PosTypeNextCoord(PosTypepos,inti)//获取下一位置switch(i)//1,2,3,4,5,6,7,8代表方向顺时针case1:pos.x+=1;//向右侧查找break;case2:pos.x+=1;pos.y+=1;break;case3:pos.y+=1;break;case4:pos.y+=1;pos.x-=1;break;case5:pos.x-=1;break;case6:pos.x-=1;pos.y-=1;break;case7:pos.y-=1;break;case8:pos.y-=1;pos.x+=1;break;}intPass(PosTypepos)//判断指定坐标是否可通过{if(mg[pos.y][pos.x]==0)//return1;elsereturn0;intFootPrint(PosTypepos)//default:exit(0);}returnpos;}intMarkPrint(PosTypepos)//留下不能通过的标记,并退回一步{mg[pos.y][pos.x]=3;//3表示曾走过,但不通return1;}voidRandMatrix(){inti=0,j=0;srand((unsigned)time(NULL));for(i=0;i
本文档为【C语言数据结构迷宫问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
青青子衿
暂无简介~
格式:doc
大小:74KB
软件:Word
页数:9
分类:高中语文
上传时间:2021-11-17
浏览量:3