POJ2251 Dungeon Master(BFS)

题目链接
借鉴博客
AC代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;

char map[35][35][35];
int vis[35][35][35];
int k,n,m,sx,sy,sz,ex,ey,ez;
int d[6][3]={
    
    {
    
    0,0,1},{
    
    0,0,-1},{
    
    0,1,0},{
    
    0,-1,0},{
    
    1,0,0},{
    
    -1,0,0}};

struct node
{
    
    
    int x,y,z,step;
};

int check(int x,int y,int z)//检查此点是否合理
{
    
    
    if(x<0||y<0||z<0||x>=k||y>=n||z>=m)
        return 1;
    else if(map[x][y][z]=='#')
        return 1;
    else if(vis[x][y][z])
        return 1;
    else
        return 0;
}

int bfs()
{
    
    
    node a,next;
    queue<node> q;
    a.x=sx;a.y=sy;a.z=sz;a.step=0;
    vis[sx][sy][sz]=1;
    q.push(a);
    while(!q.empty())
    {
    
    
        a=q.front();
        q.pop();
        if(a.x==ex&&a.y==ey&&a.z==ez)
            return a.step;
        for(int i=0;i<6;i++)
        {
    
    
            next=a;
            next.x+=d[i][0];
            next.y+=d[i][1];
            next.z+=d[i][2];
            if(check(next.x,next.y,next.z))
                continue;
            vis[next.x][next.y][next.z]=1;
            next.step+=1;
            q.push(next);
        }
    }
    return 0;
}
int main()
{
    
    
    while(scanf("%d %d %d",&k,&n,&m)!=EOF)
    {
    
    
        if(k==0&&n==0&&m==0)
            break;
        for(int i=0;i<k;i++)
        {
    
    
            for(int j=0;j<n;j++)
            {
    
    
                scanf("%s",map[i][j]);
                for(int r=0;r<m;r++)
                {
    
    
                    if(map[i][j][r]=='S')
                    {
    
    
                        sx=i;sy=j;sz=r;
                    }
                    else if(map[i][j][r]=='E')
                    {
    
    
                        ex=i;ey=j;ez=r;
                    }
                }
            }
        }
        memset(vis,0,sizeof(vis));
        int result=bfs();
        if(result)
            printf("Escaped in %d minute(s).\n",result);
        else
            printf("Trapped!\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44063734/article/details/108355163
今日推荐