B - Dungeon Master POJ - 2251

 1 //纯bfs
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <cstdio>
 6 #include <queue>
 7 
 8 using namespace std;
 9 const int maxn = 33;
10 char g[maxn][maxn][maxn];
11 bool vis[maxn][maxn][maxn];
12 int f[6][3] = { { 1, 0, 0 }, { -1, 0, 0 }, { 0, 1, 0 }, { 0, -1, 0 }, { 0, 0, 1 }, { 0, 0, -1 } };
13 int L, R, C;
14 struct node{
15     int x, y, z;
16     int flag;
17 }last, now;
18 
19 void bfs(int x1, int y1, int z1){
20     vis[z1][x1][y1] = true;
21     queue<node>q;
22     while (!q.empty()){
23         q.pop();
24     }
25     last.x = x1; last.y = y1; last.z = z1;
26     last.flag = 0;
27     q.push(last);
28     while (!q.empty()){
29         last = q.front();
30         q.pop();
31         if (g[last.z][last.x][last.y] == 'E'){
32             cout << "Escaped in " << last.flag << " minute(s)." << endl;
33             return;
34         }
35         for (int i = 0; i < 6; i++){
36             now.z = last.z + f[i][0];
37             now.x = last.x + f[i][1];
38             now.y = last.y + f[i][2];
39             now.flag = last.flag + 1;
40             if (now.z < 0 || now.z >= L || now.x < 0 || now.y < 0 || now.x >= R || now.y >= C)
41                 continue;
42             if (!vis[now.z][now.x][now.y] && g[now.z][now.x][now.y] != '#'){
43                 vis[now.z][now.x][now.y] = true;
44                 q.push(now);
45             }
46         }
47     }
48     cout << "Trapped!" << endl;
49 }
50 
51 int main(){
52     ios::sync_with_stdio(false);
53     while (cin>>L>>R>>C){
54         if (!L && !R && !C)
55             break;
56         int x, y, z;
57         memset(vis, false, sizeof(vis));
58         for (int i = 0; i < L; i++){
59             for (int j = 0; j < R; j++){
60                 for (int k = 0; k < C; k++){
61                     char s;
62                     cin >> s;
63                     g[i][j][k] = s;
64                     if (s == 'S'){
65                         z = i; x = j; y = k;
66                     }
67                 }
68             }
69         }
70         bfs(x, y, z);
71         
72     }
73     return 0;
74 }

 

posted @ 2018-04-04 19:40  ouyang_wsgwz  阅读(200)  评论(0编辑  收藏  举报