递归实现迷宫问题(顺序栈)

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); }

 

以上是关于递归实现迷宫问题(顺序栈)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构设计——用栈实现迷宫问题的求解

迷宫问题

首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)

BFS基础_HDU1312_dfs递归/栈实现+bfs实现

BFS基础_HDU1312_dfs递归/栈实现+bfs实现

数据结构实验二 栈的应用——迷宫求解问题(c++版本)