zoukankan      html  css  js  c++  java
  • POJ 2251 Dungeon Master

    http://poj.org/problem?id=2251

    这道题 就是3D版的迷宫问题 

    利用BFS求解即可 只需多加Z轴这一维度

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <queue>
     5 #define READ() freopen("in.txt", "r", stdin);
     6 
     7 using namespace std;
     8 
     9 
    10 struct Loc
    11 {
    12     int l, r, c, step;
    13     Loc () {}
    14     Loc (int l, int r, int c, int step) : l(l), r(r), c(c), step(step) {}
    15 };
    16 int L, R, C, sl, sr, sc;
    17 char maze[32][32][32];
    18 bool use[32][32][32];
    19 
    20 
    21 int d[6][3] =
    22 {
    23     0, -1, 0,
    24     0, 0, 1,
    25     0, 1, 0,
    26     0, 0, -1,
    27     1, 0, 0,
    28     -1, 0, 0
    29 };
    30 bool OK(int l, int r, int c)
    31 {
    32     if (l < 0 || l >= L || r < 0 || r >= R || c < 0 || c >= C) return false;
    33     if (maze[l][r][c] == '#') return false;
    34     else return true;
    35 }
    36 int bfs()
    37 {
    38     queue<Loc> que;
    39     Loc sloc = Loc(sl, sr, sc, 0);
    40     que.push(sloc);
    41     while (!que.empty())
    42     {
    43         Loc loc = que.front();
    44         que.pop();
    45         if (use[loc.l][loc.r][loc.c]) continue;
    46         use[loc.l][loc.r][loc.c] = true;
    47         for (int i = 0; i < 6; i++)
    48         {
    49             int nl = loc.l + d[i][0], nr = loc.r + d[i][1], nc = loc.c + d[i][2];
    50             if (OK(nl, nr, nc))
    51             {
    52                 if (maze[nl][nr][nc] == 'E') return loc.step+1;
    53                 else if (!use[nl][nr][nc]);
    54                 {
    55                     Loc nloc = Loc(nl, nr, nc, loc.step+1);
    56                     que.push(nloc);
    57                 }
    58             }
    59         }
    60     }
    61     return -1;
    62 }
    63 
    64 int main()
    65 {
    66     //READ()
    67     while (~scanf("%d%d%d",  &L, &R, &C))
    68     {
    69         if (L == 0 && R == 0 && C == 0) break;
    70         getchar();
    71         for (int l = 0; l < L; l++)
    72         {
    73             for (int r = 0; r < R; r++)
    74             {
    75                 for (int c = 0; c < C; c++)
    76                 {
    77                     scanf("%c", &maze[l][r][c]);
    78                     if (maze[l][r][c] == 'S')
    79                     {
    80                         sl = l;
    81                         sr = r;
    82                         sc = c;
    83                     }
    84                 }
    85                 getchar();
    86             }
    87             getchar();
    88         }
    89         memset(use, 0, sizeof(use));
    90         int ans = bfs();
    91         if ( ans == -1) puts("Trapped!");
    92         else printf("Escaped in %d minute(s).
    ", ans);
    93     }
    94 }
  • 相关阅读:
    淘宝返回顶部
    混合布局
    css布局使用定位和margin
    选项卡 js操作
    ul li 好友列表
    js添加删除元素
    下拉列表的简单操作
    python笔记
    kali linux 虚拟机网卡未启动
    python 重新安装pip(python2和python3共存以及pip共存)
  • 原文地址:https://www.cnblogs.com/oscar-cnblogs/p/6515887.html
Copyright © 2011-2022 走看看