好玩 三维BFS
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<string.h>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<ctime>
#include<queue>
#define hash hashh
using namespace std;
typedef long long ll;
#define sp system("pause")
#define PB push_back
int disx[4] = { 0, 0, 1, -1 };
int disy[4] = { 1, -1, 0, 0 };
char G[35][35][35];
int vis[35][35][35];
int l, n, m;
class node
{
public:
int le, x, y, mi;
};
int main()
{
while (cin >> l >> n >> m)
{
if (!l&&!n&&!m)break;
memset(vis, 0, sizeof vis);
for (int i = 0; i < l; i++)
{
for (int j = 0; j < n; j++)
scanf("%s", G[i][j]);
}
queue<node>q;
node start, en;
for (int i = 0; i < l; i++)
{
for (int j = 0; j < n; j++)
{
for (int k = 0; k < m; k++)
{
if (G[i][j][k] == 'S')
start.le = i, start.x = j, start.y = k, start.mi = 0;
if (G[i][j][k] == 'E')
en.le = i, en.x = j, en.y = k, en.mi = 0;;
}
}
}
q.push(start);
int ans = -1;
while (!q.empty())
{
node t = q.front();
q.pop();
if (t.le == en.le&&t.x == en.x&&t.y == en.y)
{
ans = t.mi;
break;
}
for (int i = 0; i < 4; i++)
{
if (t.x + disx[i] < n&&t.x + disx[i] >= 0 && t.y + disy[i] < m&&t.y + disy[i] >= 0 &&( G[t.le][t.x + disx[i]][t.y + disy[i]] == '.'||G[t.le][t.x+disx[i]][t.y+disy[i]]=='E')&&vis[t.le][t.x+disx[i]][t.y+disy[i]]==0)
{
node ne;
ne.le = t.le;
ne.x = t.x + disx[i];
ne.y = t.y + disy[i];
ne.mi = t.mi + 1;
vis[ne.le][ne.x][ne.y]=1;
q.push(ne);
}
}
if (t.le - 1 >= 0 && (G[t.le - 1][t.x][t.y] == '.' || G[t.le-1][t.x][t.y] == 'E') && vis[t.le - 1][t.x][t.y] == 0)
{
node ne;
ne.le = t.le - 1;
ne.x = t.x;
ne.y = t.y;
ne.mi = t.mi + 1;
vis[t.le - 1][t.x][t.y] = 1;
q.push(ne);
}
if (t.le + 1 <l && (G[t.le + 1][t.x][t.y] == '.' || G[t.le+1][t.x ][t.y] == 'E') && vis[t.le + 1][t.x][t.y] == 0)
{
node ne;
vis[t.le + 1][t.x][t.y] =1;
ne.le = t.le + 1;
ne.x = t.x;
ne.y = t.y;
ne.mi = t.mi + 1;
q.push(ne);
}
}
if (ans > 0)
{
printf("Escaped in %d minute(s).", ans);
}
else
printf("Trapped!");
cout << endl;
}
return 0;
}