POJ 2251 Dungeon Master 三维最短路

题意:给你一个L.R.C的地牢(L*R*C的三维地牢)。求出从s到e的最短路。

Sample Input

3 4 5
S....
.###.
.##..
###.#

#####
#####
##.##
##...

#####
#####
#.###
####E

1 3 3
S##
#E#
###

0 0 0

Sample Output

Escaped in 11 minute(s).
Trapped!
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define PI acos(-1.0)
#define Max 2005
#define inf 1<<28
using namespace std;

int L,R,C;
char Map[40][40][40];
bool visit[40][40][40];
struct kdq
{
    int xx,yy,zz;
    int step;
}q[1000000];
int movex[6]={0,0,1,-1,0,0};//东,西,南,北,上,下
int movey[6]={1,-1,0,0,0,0};
int movez[6]={0,0,0,0,1,-1};
int inmap(int x,int y,int z)
{
    if(z>=0&&z=0&&x=0&&ycnt)
   {
       kdq temp=q[cnt];
       cnt++;
       if(Map[temp.zz][temp.xx][temp.yy]=='E')
       {
           return temp.step;
       }
       for(int i=0;i<6;i++)
       {
           int tx=temp.xx+movex[i];
           int ty=temp.yy+movey[i];
           int tz=temp.zz+movez[i];
           if(Map[tz][tx][ty]!='#'&&!visit[tz][tx][ty]&&inmap(tx,ty,tz))
           {
               kdq now;
               now.xx=tx,now.yy=ty,now.zz=tz;
               now.step=temp.step+1;
               visit[tz][tx][ty]=1;
               q[num]=now;
               num++;
           }
       }
   }
}
int main()
{
    int i,j,k;
    while(scanf("%d%d%d",&L,&R,&C)&&(L+R+C))
    {
        int sx,sy,sz,ex,ey,ez;
        memset(visit,0,sizeof(visit));
        for(i=0; i>Map[i][j][k];
                    if(Map[i][j][k]=='S')
                    {
                        sz=i;
                        sx=j;
                        sy=k;
                    }
                    if(Map[i][j][k]=='E')
                    {
                        ez=i;
                        ex=j;
                        ey=k;
                    }
                }
                int ans=bfs(sx,sy,sz);
                if(visit[ez][ex][ey])
                printf("Escaped in %d minute(s).\n",ans);
                else
                puts("Trapped!");
    }
    return 0;
}
很模板的一道BFS,只需加一维的坐标就可以了

你可能感兴趣的:(BFS)