标签: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