• HDU 2102 拯救公主


        需要注意的是,骑士到达时空传输机就立即回被传输到第二层,除非另一层的相对位置是传输机或墙。

     1 #include <algorithm>
     2 #include <map>
     3 #include <vector>
     4 #include <functional>
     5 #include <string>
     6 #include <cstring>
     7 #include <queue>
     8 #include <set>
     9 #include <cmath>
    10 #include <cstdio>
    11 using namespace std;
    12 #define IOS ios_base::sync_with_stdio(false)
    13 #define TIE std::cin.tie(0)
    14 #define MIN2(a,b) (a<b?a:b)
    15 #define MIN3(a,b) (a<b?(a<c?a:c):(b<c?b:c))
    16 #define MAX2(a,b) (a>b?a:b)
    17 #define MAX3(a,b,c)  (a>b?(a>c?a:c):(b>c?b:c))
    18 typedef long long LL;
    19 typedef unsigned long long ULL;
    20 const int INF = 0x3f3f3f3f;
    21 const double PI = 4.0*atan(1.0);
    22 
    23 int c, n, m, t, gx, gy, gz;
    24 typedef struct Piont{
    25     int z, x, y, t;
    26     Piont(int z = 0, int x = 0, int y = 0, int t = 0) :z(z), x(x), y(y), t(t){};
    27 }P;
    28 
    29 char board[2][15][15];
    30 bool vis[2][15][15];
    31 int dx[4] = { 0, 0, 1, -1 }, dy[4] = { 1, -1, 0, 0 };
    32 bool solve()
    33 {
    34     memset(vis, 0, sizeof(vis));
    35     queue<P> que;
    36     que.push(P());
    37     vis[0][0][0] = true;
    38     while (que.size()){
    39         P p = que.front(); que.pop();
    40         if (p.t > t) return false;
    41         if (p.z == gz && p.x == gx && p.y == gy) return true;
    42         int nx, ny, nz;
    43 
    44         for (int i = 0; i < 4; i++){
    45             nz = p.z, nx = p.x + dx[i], ny = p.y + dy[i];
    46             if (0 <= nx && nx < n && 0 <= ny && ny < m
    47                 &&board[nz][nx][ny] != '*'&&!vis[nz][nx][ny]){
    48                 if (board[nz][nx][ny] == '#') nz ^= 1;
    49                 if (board[nz][nx][ny] != '#'&& board[nz][nx][ny]!='*'){
    50                     que.push(P(nz, nx, ny, p.t + 1));
    51                     vis[nz][nx][ny] = true;
    52                 }
    53             }
    54         }
    55     }
    56     return false;
    57 }
    58 int main()
    59 {
    60     scanf("%d", &c);
    61     while (c--){
    62         scanf("%d%d%d", &n, &m, &t);
    63         for (int i = 0; i < 2; i++){
    64             for (int j = 0; j < n; j++){
    65                 getchar();
    66                 for (int k = 0; k < m; k++){
    67                     board[i][j][k] = getchar();
    68                     if (board[i][j][k] == 'P')
    69                         gz = i, gx = j, gy = k;
    70                 }
    71             }
    72             getchar();
    73         }
    74         printf("%s
    ", solve() ? "YES" : "NO");
    75     }
    76 }
  • 相关阅读:
    OS__信号量(semaphore)PV操作
    c++ _宏与内联函数
    ubuntu_ root change to user
    联想Y450在Ubuntu下调节屏幕亮度
    AI—家庭组机器人平台环境配置,高级人工智能实验总结
    如何在ubuntu下使用windows下的程序(eg: .exe)
    Python_XML的三种解析方法
    Python学习资源汇总
    转:Emmet 学习之路
    sql入门
  • 原文地址:https://www.cnblogs.com/cumulonimbus/p/5780397.html
Copyright © 2020-2023  润新知