zoukankan      html  css  js  c++  java
  • 【HDOJ】1072 Nightmare

    bfs,使用ttl进行剪枝。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <queue>
     5 using namespace std;
     6 
     7 #define MAXNUM 10
     8 
     9 int map[MAXNUM][MAXNUM], ttls[MAXNUM][MAXNUM], n, m;
    10 int direct[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};
    11 
    12 typedef struct node_st {
    13     int ttl;
    14     int t;
    15     int x, y;
    16     node_st() {}
    17     node_st(int ttll, int tt, int xx, int yy) {
    18         ttl = ttll;
    19         t = tt;
    20         x = xx;
    21         y = yy;
    22     }
    23 } node_st;
    24 
    25 int bfs(int begx, int begy) {
    26     int val = -1;
    27     int x=begx, y=begy, ttl=6, t=0;
    28     int newx, newy, newt, newttl;
    29     queue<node_st> nodes;
    30     node_st node;
    31 
    32     memset(ttls, 0, sizeof(ttls));
    33     nodes.push(node_st(ttl,t,x,y));
    34     map[x][y] = 0;
    35 
    36     while ( !nodes.empty() ) {
    37         node = nodes.front();
    38         nodes.pop();
    39         x = node.x;
    40         y = node.y;
    41         ttl = node.ttl;
    42         t = node.t;
    43         if (map[x][y]==3 && ttl) {
    44             val = node.t;
    45             break;
    46         }
    47         --ttl; ++t;
    48         if (ttl == 0)
    49             continue;
    50         for (int i=0; i<4; ++i) {
    51             newx = x + direct[i][0];
    52             newy = y + direct[i][1];
    53             newttl = ttl;
    54             newt = t;
    55             if (newx<0 || newx>=n || newy<0 || newy>=m)
    56                 continue;
    57             if (map[newx][newy] == 0)
    58                 continue;
    59             if (map[newx][newy] == 4) {
    60                 newttl = 6;
    61                 map[newx][newy] = 0;
    62             }
    63             if (newttl > ttls[newx][newy]) {
    64                 ttls[newx][newy] = newttl;
    65                 nodes.push(node_st(newttl, newt, newx, newy));
    66             }
    67         }
    68     }
    69 
    70     return val;
    71 }
    72 
    73 int main() {
    74     int t;
    75     int i, j, begx, begy;
    76 
    77     scanf("%d", &t);
    78 
    79     while (t--) {
    80         scanf("%d %d", &n, &m);
    81         for (i=0; i<n; ++i) {
    82             for (j=0; j<m; ++j) {
    83                 scanf("%d", &map[i][j]);
    84                 if (map[i][j] == 2) {
    85                     begx = i;
    86                     begy = j;
    87                 }
    88             }
    89         }
    90         i = bfs(begx, begy);
    91         printf("%d
    ", i);
    92     }
    93 
    94     return 0;
    95 }
  • 相关阅读:
    PyQt5使用http请求获取天气
    Qt获取某地的天气情况
    各种编码方式
    Qt获取天气信息并解析
    QFile读文件
    QUrl
    Android数据库升级、降级、创建(onCreate() onUpgrade() onDowngrade())的注意点
    adb命令开关蓝牙及NFC
    fragment重叠问题解决方法
    Android跨进程启动另外一个应用界面时存在的问题解决办法
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3696110.html
Copyright © 2011-2022 走看看