#include<iostream>
#include<vector>
using namespace std;
#define N 32
char dun[N][N][N];
int vis[N][N][N];
int c,res;
int L,R,C;
typedef struct dir
{
int l;
int r;
int c;
};
vector<dir> towards;
void getTowards()
{
dir d1,d2,d3,d4,d5,d6;
d1.l=0;d1.r=-1;d1.c=0;
d2.l=0;d2.r=0;d2.c=1;
d3.l=0;d3.r=1;d3.c=0;
d4.l=0;d4.r=0;d4.c=-1;
d5.l=-1;d5.r=0;d5.c=0;
d6.l=1;d6.r=0;d6.c=0;
towards.push_back(d1);
towards.push_back(d2);
towards.push_back(d3);
towards.push_back(d4);
towards.push_back(d5);
towards.push_back(d6);
}
bool comp(dir a,dir b)
{
if(a.l==b.l&&a.r==b.r&&a.c==b.c)
return true;
return false;
}
bool addin(dir a,dir b)
{
int l,r,c;
l=a.l+b.l;
r=a.r+b.r;
c=a.c+b.c;
if(l>=0&&l<=L-1&&r>=0&&r<=R-1&&c>=0&&c<=C-1&&dun[l][r][c]!='#'&&!vis[l][r][c])
return true;
return false;
}
void dfs(dir s,dir e)
{
if(comp(s,e))
{
res=c;
return ;
}
vis[s.l][s.r][s.c]=1;
c++;
for(int i=0;i<towards.size();++i)
{
if(addin(s,towards[i]))
{
s.l+=towards[i].l;
s.r+=towards[i].r;
s.c+=towards[i].c;
dfs(s,e);
s.l-=towards[i].l;
s.r-=towards[i].r;
s.c-=towards[i].c;
}
}
c--;
vis[s.l][s.r][s.c]=0;
}
int main()
{
getTowards();
while(cin>>L>>R>>C)
{
if(L==0&&R==0&&C==0)
break;
dir s,e;
c=0,res=0;
for(int i=0;i<L;i++)
for(int j=0;j<R;j++)
for(int k=0;k<C;k++)
{
cin>>dun[i][j][k];
vis[i][j][k]=0;
if(dun[i][j][k]=='S')
{
s.l=i;s.r=j;s.c=k;
}
if(dun[i][j][k]=='E')
{
e.l=i;e.r=j;e.c=k;
}
}
dfs(s,e);
if(res==0)
cout<<"Trapped!"<<endl;
else
cout<<"Escaped in "<<res<<" minute(s)."<<endl;
}
return 0;
}
第一次写3D地牢程序,运行通过,好高兴,不过可能会有超时,需要剪枝什么的,再优化 在这里记录一下