标签:class namespace block ssi front and sid quick cte
Description
Input
Output
Escaped in x minute(s).
Trapped!
Sample Input
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Sample Output
Escaped in 11 minute(s). Trapped!
#include <iostream>
#include <queue>
using namespace std;
char maze[31][31][31];
int l, r, c;
int sx, sy, sz, gx, gy, gz;
int dx[6] = {0, 1, 0, -1, 0, 0};
int dy[6] = {1, 0, -1, 0, 0, 0};
int dz[6] = {0, 0, 0, 0, 1, -1};
typedef struct P
{
int z;
int x;
int y;
}P;
int main(void)
{
int bfs(void);
while(scanf("%d%d%d", &l, &r, &c) == 3 && l && r && c)
{
for(int i = 0; i < l; i++)
{
for(int j = 0; j < r; j++)
{
scanf("%s", maze[i][j]);
for(int k = 0; k < c; k++)
{
if(maze[i][j][k] == ‘S‘)
{
sx = j;
sy = k;
sz = i;
}
if(maze[i][j][k] == ‘E‘)
{
gx = j;
gy = k;
gz = i;
}
}
}
}
int e = bfs();
if(e == -1)
printf("Trapped!\n");
else
printf("Escaped in %d minute(s).\n", e);
}
return 0;
}
int bfs(void)
{
queue<P> que;
int data[31][31][31];
P cas;
memset(data, -1, sizeof(data));
data[sz][sx][sy] = 0;
cas.z = sz;
cas.x = sx;
cas.y = sy;
que.push(cas);
while(que.size())
{
P ca;
ca = que.front(); que.pop();
if(ca.z == gz && ca.x == gx && ca.y == gy)
break;
for(int i = 0; i < 6; i++)
{
cas.z = ca.z + dz[i];
cas.x = ca.x + dx[i];
cas.y = ca.y + dy[i];
if(cas.z >= 0 && cas.z < l && cas.x >= 0 && cas.x < r && cas.y >= 0 && cas.y < c && maze[cas.z][cas.x][cas.y] != ‘#‘ && data[cas.z][cas.x][cas.y] < 0)
{
que.push(cas);
data[cas.z][cas.x][cas.y] = data[ca.z][ca.x][ca.y] + 1;
}
}
}
return data[gz][gx][gy];
}
标签:class namespace block ssi front and sid quick cte
原文地址:http://www.cnblogs.com/limyel/p/7146010.html