3D dungeon

来源:互联网 发布:中国人寿储备主管知乎 编辑:程序博客网 时间:2024/05/27 01:44


http://acm.nyist.net/JudgeOnline/problem.php?pid=353

#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
using namespace std;  
struct node
{
 int x,y,z;
 int time;
};
int vis[40][40][40],sx,sy,sz,ex,ey,ez,n,m,l;
char map[40][40][40];
queue<node>q;
int bfs()
{
 
 int x,y,z,t,i;
 memset(vis,0,sizeof(vis));
 vis[sx][sy][sz]=1;
 node kk;
 kk.x=sx;
 kk.y=sy;
 kk.z=sz;
 kk.time=0;
 q.push(kk);
 int hx[]={0,0,1,-1,0,0},hy[]={0,0,0,0,1,-1},hz[]={1,-1,0,0,0,0};
 while(!q.empty())
 { 
  node tmp=q.front();
  q.pop();
  x=tmp.x;
  y=tmp.y;
  z=tmp.z;
  t=tmp.time;
  for(i=0;i<6;i++)
  {
   int nx=x+hx[i];
   int ny=y+hy[i];
   int nz=z+hz[i];
   if(!vis[nx][ny][nz] && map[nx][ny][nz]!='#' && nx>=1 && nx<=l && ny>=1 && ny<=n && nz>=1 && nz<=m)
   {
    if(nx==ex && ny==ey && nz==ez)
    {
     return t+1;
    }
                vis[nx][ny][nz] = 1;
                node temp;
                temp.x = nx;
                temp.y = ny;
                temp.z = nz;
                temp.time = t + 1;
                q.push(temp);
   }
  }
 }
 return -1;
}
int main()
{
 int k,i,j;
 while(cin>>l>>n>>m,l||n||m)
 {
  for(i=1;i<=l;i++)
   for(j=1;j<=n;j++)
    for(k=1;k<=m;k++)
    {
     cin>>map[i][j][k];
     if(map[i][j][k]=='S')
     {
      sx=i;
      sy=j;
      sz=k;
     }
     if(map[i][j][k]=='E')
     {
      ex=i;
      ey=j;
      ez=k;
     }
    }
  int ans=bfs();
  if(ans == -1) 
           printf("Trapped!\n"); 
        else 
           printf("Escaped in %d minute(s).\n",ans); 
  while(!q.empty())
   q.pop();
 }
 return 0;
}

0 0