Dungeon Master
题目链接
AC代码
#include
#include
#include
#include
using namespace std;
struct w
{
int x;
int y;
int z;
};
typedef struct w whi;
const int N = 35;
char g[N][N][N];
int d[N][N][N];
int l, r, c;
int dx[6] = {1, -1, 0, 0, 0, 0};
int dy[6] = {0, 0, -1, 0, 1, 0};
int dz[6] = {0, 0, 0, 1, 0, -1};
int s1, s2, s3, d1, d2, d3;
int bfs()
{
queue<whi> q;
memset(d, -1, sizeof(d));
d[s1][s2][s3] = 0;
whi f;
f.x = s1;
f.y = s2;
f.z = s3;
// q.push({s1, s2, s3});
q.push(f);
while(q.size())
{
whi t = q.front();
q.pop();
for(int i = 0; i < 6; ++i)
{
int x = t.x+dx[i];
int y = t.y+dy[i];
int z = t.z+dz[i];
// cout<<"i:"<
// if(x >= 0 && x < l && y >= 0 && y < r && z >= 0 && z < c )
// cout<
if(x >= 0 && x < l && y >= 0 && y < r && z >= 0 && z < c && g[x][y][z] == '.' && d[x][y][z] == -1)
{
// cout<<"i:"<
whi m;
m.x = x;
m.y = y;
m.z = z;
d[x][y][z] = d[t.x][t.y][t.z]+1;
q.push(m);
}
}
}
return d[d1][d2][d3];
}
int main()
{
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
while(cin>>l>>r>>c &&(l||r||c))
{
for(int i = 0; i < l; ++i)
{
for(int j = 0; j < r; ++j)
{
for(int k = 0; k < c; ++k)
{
cin>>g[i][j][k];
if(g[i][j][k] == 'S')
{
s1 = i;
s2 = j;
s3 = k;
}
if(g[i][j][k] == 'E')
{
d1 = i;
d2 = j;
d3 = k;
g[i][j][k] = '.';
}
}
}
getchar();
}
// cout<
// cout<
// for(int i = 0; i < l; ++i)
// {
// for(int j = 0; j < r; ++j)
// {
// for(int k = 0; k < c; ++k)
// {
// cout<
// }
// cout<
// }
// cout<
// }
// cout<
int ans = bfs();
if(ans == -1)
{
cout<<"Trapped!"<<endl;
}
else
{
cout<<"Escaped in "<<ans<<" minute(s)."<<endl;
}
// for(int i = 0; i < l; ++i)
// {
// for(int j = 0; j < r; ++j)
// {
// for(int k = 0; k < c; ++k)
// {
// printf("%4d", d[i][j][k]);
// }
// cout<
// }
// cout<
// }
}
return 0;
}
走迷宫(自行百度)