标签:nyoj353
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Escaped in 11 minute(s). Trapped!
#include <stdio.h> #include <string.h> #include <queue> using std::queue; char map[32][32][32], vis[32][32][32]; int a, b, c, X, Y, Z; const int mov[][3] = {0, 0, 1, 0, 0, -1, 0, 1, 0, 0, -1, 0, 1, 0, 0, -1, 0, 0}; struct Node{ int x, y, z, steps; }; queue<Node> Q; bool check(Node t){ if(t.x < 0 || t.y < 0 || t.z < 0) return 0; if(t.x >= a || t.y >= b || t.z >= c) return 0; if(vis[t.x][t.y][t.z] || map[t.x][t.y][t.z] == '#') return 0; return 1; } void BFS(){ while(!Q.empty()) Q.pop(); Node t, n = {0}; n.x = X; n.y = Y; n.z = Z; vis[X][Y][Z] = 1; Q.push(n); while(!Q.empty()){ n = Q.front(); Q.pop(); for(int i = 0; i < 6; ++i){ t = n; ++t.steps; t.x += mov[i][0]; t.y += mov[i][1]; t.z += mov[i][2]; if(check(t)){ if(map[t.x][t.y][t.z] == 'E'){ printf("Escaped in %d minute(s).\n", t.steps); return; } vis[t.x][t.y][t.z] = 1; Q.push(t); } } } printf("Trapped!\n"); } int main(){ while(scanf("%d%d%d", &a, &b, &c), a || b || c){ memset(vis, 0, sizeof(vis)); for(int i = 0; i < a; ++i){ for(int j = 0; j < b; ++j){ scanf("%s", map[i][j]); for(int k = 0; k < c; ++k) if(map[i][j][k] == 'S'){ X = i; Y = j; Z = k; } } } BFS(); } return 0; }
NYOJ353 3D dungeon 【BFS】,布布扣,bubuko.com
标签:nyoj353
原文地址:http://blog.csdn.net/chang_mu/article/details/32346729