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

    解题思路:三维数组,简单宽搜,注意细节。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<queue>
     5 using namespace std;
     6 const int maxn = 35;
     7 int dir[6][3] = {0, 0, 1, 0, 0, -1, 0, 1, 0, 0, -1, 0,
     8                 1, 0, 0, -1, 0, 0}; //上、下
     9 int L, R, C, sz, sx, sy;
    10 char mapp[maxn][maxn][maxn];
    11 
    12 struct node{
    13     int z, x, y, cnt;
    14 }p, n;
    15 
    16 queue<node> q;
    17 
    18 int BFS(int a, int b, int c)
    19 {
    20     while(!q.empty()) q.pop(); //清空队列
    21     mapp[a][b][c] = '#'; //把起始点标记为#
    22     p.z = a, p.x = b, p.y = c, p.cnt = 0;
    23     q.push(p);
    24 
    25     while(!q.empty())
    26     {
    27         p = q.front();
    28         q.pop();
    29 
    30         for(int i = 0; i < 6; i++)
    31         {
    32             int zz = p.z + dir[i][0];
    33             int xx = p.x + dir[i][1];
    34             int yy = p.y + dir[i][2];
    35 
    36             if(mapp[zz][xx][yy] == '#') continue; //走过的或不能走的路就进行下一次循环
    37             if(mapp[zz][xx][yy] == 'E') return p.cnt + 1; //碰到‘E’就返回,记住加1
    38             mapp[zz][xx][yy] = '#'; 
    39             n.z = zz, n.x = xx, n.y = yy, n.cnt = p.cnt + 1;
    40             q.push(n);
    41         }
    42     }
    43     return -1;
    44 }
    45 
    46 int main()
    47 {
    48     char str[maxn];
    49     while(~scanf("%d %d %d", &L, &R, &C) && (L || R || C))
    50     {
    51         memset(mapp, '#', sizeof(mapp));
    52         for(int i = 1; i <= L; i++)
    53         {
    54             for(int j = 1; j <= R; j++)
    55             {
    56                 scanf("%s", str+1); //这里记住要加1,scanf不吃回车键。
    57                 for(int k = 1; k <= C; k++)
    58                 {
    59                     mapp[i][j][k] = str[k];
    60                     if(mapp[i][j][k] == 'S') sz = i, sx = j, sy = k;
    61                 }
    62             }
    63         }
    64 
    65         int ans = BFS(sz, sx, sy);
    66 
    67         if(ans == -1) printf("Trapped!
    "); //说明没有找到出口
    68         else printf("Escaped in %d minute(s).
    ", ans);
    69     }
    70     return 0;
    71 }
    View Code
  • 相关阅读:
    算法二:选择排序
    算法一:冒泡算法
    windows+nginx+fcgi配置
    shell if判断的种类
    lua闭包的理解函数与表的几种表达方法
    bash: jps:未找到命令
    解决 jmeter 在非GUI模式下生成的jtl,导入到结果树,看不到请求、返回的信息
    centos 解决python3.7 安装时No module named _ssl
    dbms复习(二)
    dbms复习(一)
  • 原文地址:https://www.cnblogs.com/loveprincess/p/4854422.html
Copyright © 2011-2022 走看看