2023年c语言迷宫问题代码实现.docx
《2023年c语言迷宫问题代码实现.docx》由会员分享,可在线阅读,更多相关《2023年c语言迷宫问题代码实现.docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023年c语言迷宫问题代码实现 第一篇:c语言迷宫问题代码实现 C语言迷宫问题代码如下: #include #include #define LEN sizeof(SEAT) #define MAXSIZE 100 #define LENGTH 30 typedef struct int x;/横坐标 int y;/纵坐标 int di;/表示方向,0-3分别表示东南西北。 SEAT; struct StackList SEAT stack; int top; *Stack; int EmptyStack(StackList*Stack)/推断是否为空栈 if(Stack-top=0) re
2、turn 0; else return 1; int Move=0,1,1,0,0,-1,-1,0;/分别表示向东、西、南、北需要加上的坐标 int Mase=0;/初始化为0 int length,width; void InitMase()/在迷宫的外围添加一层“墙壁赋值为1,使得迷宫的随便一点都有四个方向 int i,j; for(i=0;itop=0; return; int PushStack(StackList*Stack,SEAT CurSeat)/进栈 if(Stack-top=MAXSIZE-1) return false; else Stack-stack.x=CurSea
3、t.x; Stack-stack.y=CurSeat.y; Stack-stack.di=CurSeat.di; Stack-top+; return true; int PopStack(StackList*Stack)/出栈 if(Stack-top=0) return false; else Stack-top-; return true; int Pass(SEAT p)/推断当前是否可行 if(Mase=0) return true; else return false; SEAT NextSeat(SEAT CurSeat)/查找下一个点,并返回 SEAT temp; temp.x
4、=CurSeat.x+Move; temp.y=CurSeat.y+Move; return temp; void Mark(SEAT p)/标记已经走过的点,避开重复 Mase=-1; int PathWay(SEAT start,SEAT end)/找路途 Stack=(struct StackList*)malloc(sizeof(struct StackList); InitStack(Stack); SEAT CurSeat; CurSeat.x=start.x+1;/由于多加了一层墙壁,因此坐标的值要加1 CurSeat.y=start.y+1;/ CurSeat.di=start
5、.di;/ do if(Pass(CurSeat) PushStack(Stack,CurSeat); Mark(CurSeat); if(CurSeat.x=end.x+1&CurSeat.y=end.y+1)/假如找到出口,返回 return true; else int find=0; while(CurSeat.distack; while(CurSeat.di=3&EmptyStack(Stack)/当前的点找不到下一个点,出栈 PopStack(Stack); CurSeat=Stack-stack;/当前的点变为前一个点 if(EmptyStack(Stack) int find
6、=0; while(CurSeat.ditop=0) printf(“There is no route can be out of the mazen); else int i; for(i=0;itop;i+) if(i!=0) printf(“-(%d,%d),Stack-stack.x-1,Stack-stack.y-1); else printf(“(%d,%d),Stack-stack.x-1,Stack-stack.y-1); void PrintMase()/输出迷宫 int i,j; for(i=1;i=0 数据关系:R=|ai-1,ai属于D,i=2,3,n 基本操作: I
7、nitStack(&S) 操作结果:构造一个空栈 Push&S,e 初始条件:栈已经存在 操作结果:将e所指向的数据加入到栈s中 Pop&S,&e 初始条件:栈已经存在 操作结果:若栈不为空,用e返回栈顶元素,并删除栈顶元素 Getpop&S,&e 初始条件:栈已经存在 操作结果:若栈不为空,用e返回栈顶元 StackEmpty(&S) 初始条件:栈已经存在 操作结果:推断栈是否为空。若栈为空,返回1,否则返回0 Destroy(&S) 初始条件:栈已经存在 操作结果:销毁栈s ADT Stack 2设定迷宫的抽象数据类型定义 ADT yanshu 数据对象:D=ai,j|ai,j属于 、*、
8、#,0=(*S).stacksize)/ 栈满,追加存储空间 *(*S).top)+=e;return 1; / 若栈不空,则删除S的栈顶元素,用e返回其值,并返回1;否则返回0。int Pop(SqStack *S,SElemType *e) if(*S).top =(*S).base) 左 return 1; / 定义墙元素值为0,可通过路径为1,不能通过路径为-1,通过路径为踪迹 / 当迷宫m的b点的序号为1(可通过路径),return 1;否则,return 0。int Pass(PosType b) if(m=1) else return 0;return 1;return 0;*e
9、 = *-(*S).top; / 这个等式的+ * 优先级相同,但是它们的运算方式,是自右向 (*S).base =(SElemType *)realloc(*S).base ,(*S).top =(*S).base+(*S).stacksize;(*S).stacksize += STACKINCREMENT;(*S).stacksize + STACKINCREMENT)* sizeof(SElemType);exit(0);if(!(*S).base)return 0;return 1; void FootPrint(PosType a) / 使迷宫m的a点的序号变为踪迹(curstep
10、),表示经过 m=curstep; / 根据当前位置及移动方向,返回下一位置 PosType NextPos(PosType c,int di) PosType direc=0,1,1,0,0,-1,-1,0;/ 行增量,列增量 / 移动方向,依次为东南西北 c.x+=direc.x;c.y+=direc.y;return c; / 使迷宫m的b点的序号变为-1(不能通过的路径)void MarkPrint(PosType b) m=-1; / 若迷宫maze中存在从入口start到出口end的通道,则求得一条 / 存放在栈中(从栈底到栈顶),并返回1;否则返回0 int MazePath(P
11、osType start,PosType end) SqStack S;PosType curpos;SElemType e; InitStack(&S);curpos=start;do if(Pass(curpos)/ 当前位置可以通过,即是未曾走到过的通道块 FootPrint(curpos);/ 留下踪迹 e.ord=curstep;e.seat.x=curpos.x;e.seat.y=curpos.y;e.di=0;Push(&S,e);/ 入栈当前位置及状态 curstep+;/ 踪迹加1 if(curpos.x=end.x&curpos.y=end.y)/ 到达终点(出口) els
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 语言 迷宫 问题 代码 实现
限制150内