码迷,mamicode.com
首页 > 其他好文 > 详细

B - Dungeon Master POJ - 2251

时间:2018-04-04 23:13:38      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:out   node   stream   bre   iostream   log   queue   while   cout   

 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 }

 

B - Dungeon Master POJ - 2251

标签:out   node   stream   bre   iostream   log   queue   while   cout   

原文地址:https://www.cnblogs.com/jaydenouyang/p/8719002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!