第一次遇到的这种类型:三维空间的搜索
但其实很简单
#include<bits/stdc++.h>
#define x first
#define y second
#define rep(i, x) for (int i = 0; i < x; i ++ )
#define repn(i, x) for (int i = 1; i <= x; i ++ )
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
typedef pair<PII,int> PIII;
int L, R, C;
const int N = 60;
char g[N][N][N];
int dist[N][N][N];
int dx[6] = {-1, 0, 1, 0, 0, 0}, dy[6] = {0, 1, 0, -1, 0, 0}, dz[6] = {0, 0, 0, 0, 1, -1};
int X, Y, Z;
int bfs(int sx, int sy, int sz)
{
memset(dist, -1, sizeof dist);
queue<PIII> q;
q.push({{sx, sy}, sz});
dist[sx][sy][sz] = 0;
while(q.size())
{
auto t = q.front();
q.pop();
for (int i = 0; i < 6; i ++ )
{
int a = t.x.x + dz[i], b = t.x.y + dx[i], c = t.y + dy[i];
if (a < 1 || a > L || b < 1 || b > R || c < 1 || c > C || dist[a][b][c] != -1 || g[a][b][c] == '#') continue;
dist[a][b][c] = dist[t.x.x][t.x.y][t.y] + 1;
q.push({{a, b}, c});
}
}
return dist[X][Y][Z];
}
int main()
{
cin >> L >> R >> C;
int sx, sy, sz;
for (int i = 1; i <= L; i ++ )
for (int j = 1; j <= R; j ++ )
for (int k = 1; k <= C; k ++ )
{
cin >> g[i][j][k];
if (g[i][j][k] == 'S')
sx = i , sy = j, sz = k;
if (g[i][j][k] == 'E')
X = i, Y = j, Z = k;
}
int t = bfs(sx, sy, sz);
if (t != -1)
printf("Escaped in %d minute(s).", t);
else cout << "Trapped!";
return 0;
}