poj 2251 Dungeon Master

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;

int k,n,m;
char s[40][40][40];
int use[40][40][40];
int dx[]= {0,0,1,-1,0,0};
int dy[]= {1,-1,0,0,0,0};
int dz[]= {0,0,0,0,1,-1};
struct data
{
    int x,y,z,t;
} t1,t0;

queue<data>q;

int bfs(int sx,int sy,int sz)
{
    int i,j,flag=0;
    while(!q.empty()) q.pop();
    t0.x=sx;
    t0.y=sy;
    t0.z=sz;
    t0.t=0;
    q.push(t0);
    while(!q.empty())
    {
        t1=q.front();
        q.pop();
        if(s[t1.z][t1.x][t1.y]=='E')
        {
            flag=t1.t;
            break;
        }
        for(i=0; i<6; i++)
        {
            t0.x=t1.x+dx[i];
            t0.y=t1.y+dy[i];
            t0.z=t1.z+dz[i];
            t0.t=t1.t+1;
            if(t0.x<0||t0.x>=n||t0.y<0||t0.y>=m||t0.z<0||t0.z>=k) continue;
            if(s[t0.z][t0.x][t0.y]=='#') continue;

            if(t0.t<use[t0.z][t0.x][t0.y]||use[t0.z][t0.x][t0.y]==0)
            {
                q.push(t0);
                use[t0.z][t0.x][t0.y]=t0.t;
            }
        }
    }
    return flag;
}

int main()
{
    int i,j,p,sx,sy,sz;
    while(~scanf("%d%d%d",&k,&n,&m))
    {
        if(k==0&&n==0&&m==0) break;
        //getchar();
        for(p=0; p<k; p++)
        {
            for(i=0; i<n; i++)
            {
                scanf("%s",s[p][i]);
                for(j=0; j<n; j++)
                {

                    if(s[p][i][j]=='S')
                    {
                        sx=i;sy=j;sz=p;
                    }
                }
                //getchar();
            }
            //getchar();
        }
        memset(use,0,sizeof(use));
        int f=bfs(sx,sy,sz);
        if(f>0) printf("Escaped in %d minute(s).
",f);
        else printf("Trapped!
");
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

原文地址:https://www.cnblogs.com/xryz/p/4847923.html