POJ - 3984 迷宫问题 bfs解法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ - 3984 迷宫问题 bfs解法相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
using namespace std;
int a[5][5],b[5][5];
int di[4][2]={0,1,0,-1,1,0,-1,0};
void bfs(int x,int y)
{
    int tx=x,ty=y,i;
    if(a[x][y]==0)
    {
        a[x][y]=1;
        for(i=0;i<4;i++)
        {
            tx+=di[i][0];
            ty+=di[i][1];
            if(a[tx][ty]==0&&tx>=0&&ty>=0&&tx<=4&&ty<=4)
            {
                b[tx][ty]=min(b[tx][ty],b[x][y]+1);
            }
        }
        for(i=0;i<4;i++)
        {
            tx+=di[i][0];
            ty+=di[i][1];
            if(a[tx][ty]==0&&tx>=0&&ty>=0&&tx<=4&&ty<=4)
                bfs(tx,ty);
        }
    }
}
int main()
{
    stack<int>s1,s2;
    int i,j,ti,tj,k;
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
            scanf("%d",&a[i][j]);
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
            b[i][j]=999;
    b[0][0]=1;
    bfs(0,0);
    i=4;j=4;
    s1.push(4);
    s2.push(4);
    while(1)
    {
        if(j==0&&i==0)
            break;
        for(k=0;k<4;k++)
        {
            ti=i+di[k][0];
            tj=j+di[k][1];
            if(b[i][j]==b[ti][tj]+1 && ti>=0 && tj>=0 && ti<=4 && tj<=4)
            {
                s1.push(ti);
                s2.push(tj);
                i=ti;j=tj;
               // printf("%d %d\n",i,j);
                break;
            }
        }
    }
    while(s1.size()!=0)
    {
        i=s1.top();s1.pop();
        j=s2.top();s2.pop();
        printf("(%d, %d)\n",i,j);
    }
    return 0;
}

 

以上是关于POJ - 3984 迷宫问题 bfs解法的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3984 迷宫问题(简单bfs+路径打印)

POJ 3984 迷宫问题BFS/路径记录

迷宫问题-poj3984-bfs

POJ-3984-迷宫问题-BFS(广搜)-手写队列

POJ-3984-迷宫问题(BFS)

POJ 3984 迷宫问题 (BFS + Stack)