第一种DFS写法 (超时)
#pragma GCC positionimize(3,"Otrst","inline")
//#include "emplace.hpp"
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
const int N=1e6+10;
const int INF=0x3f3f3f;
const double pi = 3.141592653;
const double E = 2.71828182846;
const ll mod=1e9+7;
const int M=1e3+5;
const double eps=1e-8;
#define ci(x) scanf("%d",&x)
#define co(x) printf("%d\n",x)
using namespace std;
int L,C,R;
char str[35][35][35];
int vis[35][35][35]={0};
int dx[5]={0,0,1,-1};
int dy[5]={1,-1,0,0};
int dis[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
bool flag=false;
int dfs(int l,int r,int c)
{
if(str[l][r][c]=='E')
{
return 0;
}
int ans = INF;
for(int i=0;i<6;i++)
{
int ll=l+dis[i][0];
int rr=r+dis[i][1];
int cc=c+dis[i][2];
if(ll<0||ll>=L||rr<0||rr>=R||cc<0||cc>=C
||vis[ll][rr][cc]==true||str[ll][rr][cc]=='#')
{
continue;
}
vis[ll][rr][cc]=true;
ans=min(ans,dfs(ll,rr,cc));
vis[ll][rr][cc]=false;
}
return (ans!=INF)? ans+1:INF;
}
int main()
{
while(~scanf("%d %d %d",&L,&R,&C)){
if(L==0&&R==0&C==0)
break;
for(int i=0;i<L;i++)
{
for(int j=0;j<R;j++)
{
scanf("%s",str[i][j]);
}
}
/*for(int i=0;i<L;i++)
{
for(int j=0;j<R;j++)
{
printf("%s\n",str[i][j]);
}
}*/
int ans=dfs(0,0,0);
if(ans!=INF)
{
printf("Escaped in %d minute(s).\n",ans);
}
else
{
puts("Trapped!");
}
}
//printf("%d\n",ans);
return 0;
}
BFS写法 AC 注意数组需要进行初始化
#pragma GCC positionimize(3,"Otrst","inline")
//#include "emplace.hpp"
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
const int N=1e6+10;
const int INF=0x3f3f3f;
const double pi = 3.141592653;
const double E = 2.71828182846;
const ll mod=1e9+7;
const int M=1e3+5;
const double eps=1e-8;
#define ci(x) scanf("%d",&x)
#define co(x) printf("%d\n",x)
using namespace std;
int L,C,R;
char str[35][35][35];
bool vis[35][35][35];
int dx[5]={0,0,1,-1};
int dy[5]={1,-1,0,0};
int dis[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
//使用DFS超时
/*int dfs(int l,int r,int c)
{
if(str[l][r][c]=='E')
{
return 0;
}
int ans = INF;
for(int i=0;i<6;i++)
{
int ll=l+dis[i][0];
int rr=r+dis[i][1];
int cc=c+dis[i][2];
if(ll<0||ll>=L||rr<0||rr>=R||cc<0||cc>=C
||vis[ll][rr][cc]==true||str[ll][rr][cc]=='#')
{
continue;
}
vis[ll][rr][cc]=true;
ans=min(ans,dfs(ll,rr,cc));
vis[ll][rr][cc]=false;
}
return (ans!=INF)? ans+1:INF;
}*/
//BFS
struct step{
int x,y,z;
int val;
};
int bfs(int l,int r,int c)
{
queue<step> q;
step p={l,r,c,0};
q.push(p);
while(!q.empty())
{
step s=q.front();
q.pop();
for(int i=0;i<6;i++)
{
step next={s.x+dis[i][0],s.y+dis[i][1],s.z+dis[i][2],s.val+1};
if(next.x<0||next.x>=L||next.y<0||next.y>=R||next.z<0||next.z>=C||
vis[next.x][next.y][next.z]==true||str[next.x][next.y][next.z]=='#')
{
continue;
}
else if(str[next.x][next.y][next.z]=='E')
{
return next.val;
}
vis[next.x][next.y][next.z]=true;
q.push(next);
}
}
return INF;
}
int main()
{
while(~scanf("%d %d %d",&L,&R,&C)){
if(L==0&&R==0&C==0)
break;
memset(vis,false,sizeof(vis));
int dx,dy,dz;
for(int i=0;i<L;i++)
{
for(int j=0;j<R;j++)
{
scanf("%s",str[i][j]);
for(int k=0;k<C;k++)
{
if(str[i][j][k]=='S')
{
dx=i;
dy=j;
dz=k;
}
}
}
}
/*for(int i=0;i<L;i++)
{
for(int j=0;j<R;j++)
{
printf("%s\n",str[i][j]);
}
}*/
int ans=bfs(dx,dy,dz);
if(ans!=INF)
{
printf("Escaped in %d minute(s).\n",ans);
}
else
{
puts("Trapped!");
}
}
//printf("%d\n",ans);
return 0;
}