回溯算法之迷宫问题

题意:

迷宫问题,大家都懂的

#include<iostream>
#include<stdio.h>
#include<stack>
#include<string.h>
using namespace std;
#define max 1000
int map[max][max];
int visit[max][max];
int row,col;
int sx,sy,ex,ey;
typedef struct node
{
    int x;
    int y;
    int step;
    int dir;
} position;
stack<struct node> stack2;
int dir[4][2]={0,1,1,0,0,-1,-1,0};
int mazePath()
{
    position cur;
    cur.x=sx;
    cur.y=sy;
    cur.step=0;
    cur.dir=0;
    do
    {
        if((cur.x>=0&&cur.x<row)&&(cur.y>=0&&cur.y<col)&&visit[cur.x][cur.y]==1)
        {
            stack2.push(cur);
            visit[cur.x][cur.y]=0;
            if(cur.x==ex&&cur.y==ey)
            return 1;
            cur.x=cur.x+dir[0][0];
            cur.y=cur.y+dir[0][1];
            cur.step++;
            cur.dir=0;
        }
        else
        {
            position testpos=stack2.top();
            stack2.pop();
            while(testpos.dir==3)
            {
                testpos=stack2.top();
                stack2.pop();
                visit[testpos.x][testpos.y]=1;
            }
            if(testpos.dir<3)
            {
                testpos.dir++;
                stack2.push(testpos);
                cur.x=testpos.x+dir[testpos.dir][0];
                cur.y=testpos.y+dir[testpos.dir][1];
            }
        }
    }while(!stack2.empty());
    return 0;
}
void printPath()
{
    stack<position> stack1;
    while(!stack2.empty())
    {
        stack1.push(stack2.top());
        stack2.pop();
    }
    while(!stack1.empty())
    {
        position q=stack1.top();
        stack1.pop();
        printf("%d %d\n",q.x,q.y);
    }
}
int main()
{
    scanf("%d%d",&row,&col);
    for(int i=0;i<max;i++)
    {
       for(int j=0;j<max;j++)
       visit[i][j]=1;
    }
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)
        scanf("%d",&visit[i][j]);
    }
    scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
    if(mazePath())
    printPath();
    else printf("no path\n");
    return 0;
}

 

    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/sdjzli/article/details/8108472
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞