标签:
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;
}版权声明:本文博客原创文章,博客,未经同意,不得转载。
标签:
原文地址:http://www.cnblogs.com/bhlsheji/p/4732439.html