• uestc 方老师与迷宫(三维迷宫)


    本质上与二位迷宫裸题是一致的

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<iostream>
     6 #include<queue>
     7 using namespace std;
     8 #define MAXN 33
     9 
    10 struct node{
    11     int x, y, z;
    12     int time;
    13 }s,e;
    14 int dx[] = { 1, -1, 0, 0, 0, 0 };
    15 int dy[] = { 0, 0, 1, -1, 0, 0 };
    16 int dz[] = { 0, 0, 0, 0, 1, -1 }; 
    17 
    18 char mp[MAXN][MAXN][MAXN];
    19 bool vis[MAXN][MAXN][MAXN];
    20 int l, r, c;
    21 
    22 void init()
    23 {
    24     memset(vis,0,sizeof(vis));
    25 }
    26 
    27 
    28 void input()
    29 {
    30     init();
    31     for (int i = 1; i <= l; ++i)
    32         for (int j = 1; j <= r; ++j)
    33             for (int k = 1; k <= c; ++k) {
    34                 cin >> mp[i][j][k];
    35                 if (mp[i][j][k] == 'S') {
    36                     s.x = i;
    37                     s.y = j;
    38                     s.z = k;
    39                     s.time = 0;
    40                 }
    41                 else if (mp[i][j][k] == 'E') {
    42                     e.x = i;
    43                     e.y = j;
    44                     e.z = k;
    45                 }
    46             }
    47     //cout << "s.x = " << s.x << " s.y = " << s.y << " s.z = " << s.z << endl;
    48     //cout << "e.x = " << e.x << " e.y = " << e.y << " e.z = " << e.z << endl;
    49 }
    50 
    51 bool judge(int i,int j,int k)
    52 {
    53     if (i < 1 || i > l || j < 1 || j > r || k < 1 || k > c || vis[i][j][k])
    54         return true;
    55     return false;
    56 }
    57 
    58 int bfs()
    59 {
    60     queue<node> q;
    61     q.push(s);
    62     vis[s.x][s.y][s.z] = true;
    63     while (!q.empty()) {
    64         node now = q.front();
    65         q.pop();
    66         //cout << "x = " << now.x << " y = " << now.y << " z = " << now.z << endl; 
    67         if (mp[now.x][now.y][now.z] == 'E') {
    68             return now.time;
    69         }
    70         node next;
    71         for (int i = 0; i < 6; ++i) {
    72             next.x = now.x + dx[i];
    73             next.y = now.y + dy[i];
    74             next.z = now.z + dz[i];
    75             if (judge(next.x, next.y, next.z)) continue;
    76             if (mp[next.x][next.y][next.z] != '#') {
    77                 next.time = now.time + 1;
    78                 q.push(next);
    79                 vis[next.x][next.y][next.z] = true;
    80             }
    81         }
    82     }
    83     return -1;
    84 }
    85 
    86 int main()
    87 {
    88     while (cin >> l >> r >> c, l + r + c) {
    89         input();
    90         int res = bfs();
    91         if (res == -1) puts("Trapped!");
    92         else printf("Escaped in %d minute(s).
    ",res);
    93     }
    94     return 0;
    95 }
  • 相关阅读:
    自动化单元测试
    Exadata是什么?
    Exadata的独门武器卸载(Offloading)
    Exadata中最有用的功能存储索引
    面向对象分析与设计(第3版)
    代码质量(权威精选植根于开发实践的最佳读物)
    温昱谈程序员向架构师转型的规律
    sql语句大全
    一个弹出层的代码
    ASP.NET 2.0 实现伪静态网页方法 (转载 ————续)
  • 原文地址:https://www.cnblogs.com/usedrosee/p/4259809.html
Copyright © 2020-2023  润新知