zoukankan      html  css  js  c++  java
  • hdoj1072 Nightmare bfs

    题意:在一个地图里逃亡,2是起点,3是终点,1是路,0是墙,逃亡者携带一个炸弹,6分钟就会炸,要在6分钟前到达4可以重制时间,问是否能逃亡,若能则输出最小值

    我的思路:bfs在5步内是否存在3,存在则输出退出。记录到达每一点剩余时间,如果再次到达某点的剩余时间大于原剩余时间则更新,加入队列。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <queue>
     4 
     5 using namespace std;
     6 const int M = 10;
     7 int map[M][M];
     8 int graph[M][M];
     9 struct node
    10 {
    11     int x,y;
    12     int step;
    13     int time;
    14 };
    15 
    16 node now,nn,next1;
    17 queue <struct node> q;
    18 int n,m;
    19 int dire[4][2] = {{-1,0},{0,-1},{1,0},{0,1}};
    20 
    21 int bfs()
    22 {
    23     while (!q.empty())
    24     {
    25         now = q.front();
    26         q.pop();
    27         for (int i = 0;i < 4;i++)
    28         {
    29             int x = now.x + dire[i][0];
    30             int y = now.y + dire[i][1];
    31             if (x>=0 && x<n && y>=0 && y<m && map[x][y] != 0 && map[x][y]!=2 && now.time-1>0)  //踩点到到达4也会爆炸
    32             {                
    33                 next1.x = x;
    34                 next1.y = y;
    35                 if (map[x][y] == 3)
    36                 {
    37                     return now.step+1;
    38                 }
    39                 if (map[x][y] == 4)
    40                 {
    41                     next1.time = 6;
    42                 }
    43                 else next1.time = now.time - 1;
    44                 next1.step = now.step+1;
    45                 if (next1.time > graph[x][y])    //加入队列条件
    46                 {
    47                     graph[x][y] = next1.time;
    48                     q.push(next1);
    49                 }
    50             }
    51         }
    52     }
    53     return -1;
    54 }
    55 int main()
    56 {
    57     int t;
    58     cin >> t;
    59     while (t--)
    60     {
    61         cin >> n >> m;
    62         while (!q.empty())
    63             q.pop();
    64         for (int i = 0;i < n;i++)
    65         {
    66             for (int j = 0;j < m;j++)
    67             {
    68                 cin >> map[i][j];
    69                 graph[i][j] = 0;
    70                 if (map[i][j] == 2)
    71                 {
    72                     nn.x = i;
    73                     nn.y = j;
    74                     nn.step = 0;
    75                     nn.time = 6;
    76                     q.push(nn);
    77                 }
    78             }
    79         }
    80         cout << bfs() << endl;
    81     }
    82     return 0;
    83 }
  • 相关阅读:
    Python学习笔记21:数据库操作(sqlite3)
    JAVA的extends使用方法
    thinkphp5的Illegal string offset 'id'错误
    thinkphp5项目--个人博客(五)
    语法错误: unexpected ''); ?></span></span></h2> ' (T_CONSTANT_ENCAPSED_STRING), expecting ',' or ';'
    thinkphp5.0的验证码安装和相关错误
    thinkphp5项目--个人博客(四)
    thinkphp5项目--个人博客(三)
    NAS是什么
    百度编辑器简介及如何使用
  • 原文地址:https://www.cnblogs.com/ediszhao/p/4743240.html
Copyright © 2011-2022 走看看