题目地址:http://poj.org/problem?id=2251
源代码:
#include<iostream>
#include<string.h>
using namespace std;
int dr1[6]={1,-1,0,0,0,0};
int dr2[6]={0,0,1,-1,0,0};
int dr3[6]={0,0,0,0,1,-1};
int l,m,n;
char s[31][31][31];
struct N
{
int x,y,z;
int step;
}r[30000];
int main()
{
int i,j,k;
while(cin>>l>>m>>n)
{
if(m==0&&n==0&&l==0) break;
for(i=0;i<l;i++)
for(j=0;j<m;j++)
cin>>s[i][j];
int stX=-1,stY=-1,stZ=-1;
for(i=0;i<l&&stX==-1;i++)
for(j=0;j<m&&stX==-1;j++)
for(k=0;k<n;k++)
if(s[i][j][k]=='S')
{
stX=j;
stY=k;
stZ=i;
}
int pre=0;
int front=0;
r[0].x=stX;
r[0].y=stY;
r[0].z=stZ;
r[0].step=0;
int x,y,z;
int flag[31][31][31];
memset(flag,0,sizeof(flag));
flag[stX][stY][stZ]=1;
int neng=0;
while(front<=pre&&!neng)
{
for(i=0;i<6;i++)
{
x=r[front].x+dr1[i];
y=r[front].y+dr2[i];
z=r[front].z+dr3[i];
if(x>=0&&x<m&&y>=0&&y<n&&z>=0&&z<l&&s[z][x][y]!='#'&&!flag[z][x][y])
{
flag[z][x][y]=1;
r[++pre].x=x;
r[pre].y=y;
r[pre].z=z;
r[pre].step=r[front].step+1;
if(s[z][x][y]=='E')
{
cout<<"Escaped in ";
cout<<r[pre].step<<" minute(s)."<<endl;
neng=1;
break;
}
}
}
front++;
}
if(!neng) cout<<"Trapped!"<<endl;
}
}