递归实现迷宫问题(顺序栈)
Posted ewitt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归实现迷宫问题(顺序栈)相关的知识,希望对你有一定的参考价值。
#include <iostream.h> #define MaxSize 100 #define M 8 #define N 8 int mg[M+2][N+2]= { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,1,0,0,1,0,1}, {1,1,0,1,0,1,0,1,0,1}, {1,0,0,0,0,0,0,0,1,1}, {1,0,1,1,1,0,1,0,0,1}, {1,0,1,0,1,1,0,1,0,1}, {1,0,1,0,0,0,1,1,0,1}, {1,0,1,1,1,0,1,1,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1} }; typedef struct { int i,j,di;//di为方向 } Stack; //定义栈类型 Stack StmStack[100]; int top=-1; bool safe(int xi,int yi) { if(xi>8||yi>8||xi<1||yi<1||mg[xi][yi]==1||mg[xi][yi]==-1) return 0; return 1; } void disp(int top) {int i=0; while (i<=top) { cout<<StmStack[i].i<<‘,‘<<StmStack[i].j<<endl; i++;} } void mgpath(int xi,int yi,int xe,int ye) { int di,x=xi,y=yi; top++; StmStack[top].i=x;StmStack[top].j=y;StmStack[top].di=-1;mg[x][y]=-1; if(x==xe && y==ye) { cout<<"find it!"<<endl; disp(top);return ;} di=StmStack[top].di+1; while(di<4) { switch (di) { case 0:y=yi+1; x=xi;break ; case 1:x=xi+1; y=yi;break; case 2:x=xi-1; y=yi;break; case 3:y=yi-1;x=xi; break; } if(!safe(x,y)) {di++;continue;} StmStack[top].di=di; //设置栈顶方块的方向 mgpath( x, y,xe,ye);//cmt1 mg[x][y]=0; //应该抺掉上一步(cmt1)走过的方块
top--; di++; } }
void main() { mgpath(1,1,8,8); }
以上是关于递归实现迷宫问题(顺序栈)的主要内容,如果未能解决你的问题,请参考以下文章