第二组样例:

题意

给出一个起始位置,然后要跑到这幢建筑物的外面,上下左右四个方向,只要是空地 就可以走 走一步 花费一秒 然后有若干串火苗,每一秒钟 会向上下左右 四个方向的空地 蔓延 但是 逃跑的优先级在先

比如

这个例子 @会先逃到右边,火苗再蔓延

思路

用BFS 记录能到的下一步的位置,然后记录火苗的本次蔓延位置,用双队列,然后先遍历下一步的位置 再遍历火苗蔓延的位置 最后 设置出口条件就可以了

两个出口

① 当没有下一步的位置 并且当前步没有一步是在边界 就是no

② 当前步在边界 直接更新答案 输出

AC代码

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <ctype.h>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <climits>
  7. #include <ctime>
  8. #include <iostream>
  9. #include <algorithm>
  10. #include <deque>
  11. #include <vector>
  12. #include <queue>
  13. #include <string>
  14. #include <map>
  15. #include <stack>
  16. #include <set>
  17. #include <numeric>
  18. #include <sstream>
  19. #include <iomanip>
  20. #include <limits>
  21. using namespace std;
  22. typedef long long ll;
  23. typedef long double ld;
  24. typedef unsigned long long ull;
  25. typedef pair <int, int> pii;
  26. typedef pair <ll, ll> pll;
  27. const double PI = 3.14159265358979323846264338327;
  28. const double E = exp(1);
  29. const double eps = 1e-6;
  30. const int INF = 0x3f3f3f3f;
  31. const int maxn = 1e3 + 5;
  32. const int MOD = 1e9 + 7;
  33. string Map[maxn];
  34. int n, m;
  35. int ans;
  36. queue <pii> q, f;
  37. int Move[4][2] =
  38. {
  39. -1, 0, //up
  40. 1, 0, //down
  41. 0,-1, //left
  42. 0, 1, //right
  43. };
  44. bool out_range(int x, int y)
  45. {
  46. if (x == 0 || y == 0 || x == (m - 1) || y == (n - 1))
  47. return true;
  48. return false;
  49. }
  50. bool in_range(int x, int y)
  51. {
  52. if (x >= 0 && x < m && y >= 0 && y < n)
  53. return true;
  54. return false;
  55. }
  56. void fire(int x, int y)
  57. {
  58. int next_x, next_y;
  59. for (int i = 0; i < 4; i++)
  60. {
  61. next_x = x + Move[i][0];
  62. next_y = y + Move[i][1];
  63. if (in_range(next_x, next_y))
  64. {
  65. if (Map[next_x][next_y] == '.' || Map[next_x][next_y] == '$')
  66. {
  67. Map[next_x][next_y] = '*';
  68. f.push(pii(next_x, next_y));
  69. }
  70. }
  71. }
  72. }
  73. void dfs(int cur)
  74. {
  75. int x, y;
  76. int next_x, next_y;
  77. int len = q.size();
  78. while (len--)
  79. {
  80. x = q.front().first;
  81. y = q.front().second;
  82. q.pop();
  83. if (Map[x][y] == '*')
  84. continue;
  85. if (out_range(x, y))
  86. {
  87. ans = cur;
  88. return;
  89. }
  90. for (int i = 0; i < 4; i++)
  91. {
  92. next_x = x + Move[i][0];
  93. next_y = y + Move[i][1];
  94. if (in_range(next_x, next_y) && Map[next_x][next_y] == '.')
  95. {
  96. Map[next_x][next_y] = '$';
  97. q.push(pii(next_x, next_y));
  98. }
  99. }
  100. }
  101. if (q.size() == 0)
  102. return;
  103. else
  104. {
  105. int len = f.size();
  106. int x, y;
  107. while (len--)
  108. {
  109. x = f.front().first;
  110. y = f.front().second;
  111. fire(x, y);
  112. f.pop();
  113. }
  114. dfs(cur + 1);
  115. }
  116. }
  117. int main()
  118. {
  119. int t;
  120. cin >> t;
  121. while (t--)
  122. {
  123. while (!q.empty())
  124. q.pop();
  125. while (!f.empty())
  126. f.pop();
  127. scanf("%d%d", &n, &m);
  128. for (int i = 0; i < m; i++)
  129. {
  130. cin >> Map[i];
  131. for (int j = 0; j < n; j++)
  132. {
  133. if (Map[i][j] == '@')
  134. {
  135. Map[i][j] = '$';
  136. q.push(pii(i, j));
  137. }
  138. else if (Map[i][j] == '*')
  139. f.push(pii(i, j));
  140. }
  141. }
  142. ans = -1;
  143. dfs(1);
  144. if (ans == -1)
  145. printf("IMPOSSIBLE\n");
  146. else
  147. printf("%d\n", ans);
  148. }
  149. }

Kattis - fire2 【BFS】的更多相关文章

  1. Kattis - virus【字符串】

    Kattis - virus[字符串] 题意 有一个正常的DNA序列,然后被病毒破坏.病毒可以植入一段DNA序列,这段插入DNA序列是可以删除正常DNA序列中的一个连续片段的. 简单来说就是,给你一段 ...

  2. Kattis - honey【DP】

    Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...

  3. Kattis - fence2【二分法】

    Kattis - fence2[二分法] 题意 有一个农夫需要建造一个 N - 1 米长的篱笆,需要 N 根柱子,然后有 K 根 柱子 需要将这 K 根柱子 切成 N 段 然后 要尽量保证这 N 段柱 ...

  4. Kattis - cokolada【水】

    Kattis - cokolada[水] 题意 有一个人想吃巧克力,但是巧克力都是按照 2 的幂次的数量包装的,然后他想吃一定数量块的巧克力,然后可以敲碎,每次敲碎都分成两半,比如四块装的分成两块就是 ...

  5. Kattis - glitchbot 【DFS】

    Kattis - glitchbot [DFS] 题意 有一个机器人 刚开始在(0, 0),然后给出一个目标点,并且会给出一系列指令,但是其中会有一个指令是错误的.我们需要找出那个指令,并且改成正确的 ...

  6. Kattis - amsterdamdistance【数学】

    Kattis - amsterdamdistance[数学] 题意 给出两个点 算出从第一个点到第二个点的最短距离,只不过这里不是直角坐标系, 是雷达图 思路 因为内圈的圆的路径要比外圈的小,所以我们 ...

  7. 【bfs】抓住那头牛

    [题目] 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000),牛位于点K(0≤K≤100000).农夫有两种移动方式: 1.从X移动到X-1或X+1,每次 ...

  8. 【bfs】拯救少林神棍(poj1011)

    Description 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位.然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度.请你 ...

  9. 【bfs】Knight Moves

    [题目描述] 输入nn代表有个n×nn×n的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步. [输入] 首先输入一个nn,表示测试样例 ...

随机推荐

  1. jQuery 事件 - delegate() 方法

    <html><head><script type="text/javascript" src="/jquery/jquery.js" ...

  2. java web 中文乱码

    开发环境:设设置idea的VM options:-Dfile.encoding=UTF-8 生产环境:在tomcat部署目录bin\catalina.bat中,set "JAVA_OPTS= ...

  3. iOS开发 - 第05篇 - 项目 - 12 - 图文混排

    1.首页微博文字处理 对于之前微博项目中首页:微博文字中的用户名.话题.链接等文字须要高亮显示.表情字符串须要显示相应表情. 思路: 1>之前微博中的文字使用NSString,要达到不同文字的高 ...

  4. Python之内置类型

    python有6大内置类型 数字.序列.映射.类.实例.异常. 下面就慢慢来说明: 1.数字 有3个明确的数字类型,整型,浮点型及复数.另外,布尔是整型的一个子类型. (另外标准库还包含额外的数字类型 ...

  5. LinkedList add remove get 代码分析

    add void linkLast(E e) { //e 要添加的元素 final Node<E> l = last; // 最后一个元素 final Node<E> newN ...

  6. linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现

    1 TCP简介 tcp是一种基于流的应用层协议,其“可靠的数据传输”实现的原理就是,“拥塞控制”的滑动窗口机制,该机制包含的算法主要有“慢启动”,“拥塞避免”,“快速重传”. 2 TCP socket ...

  7. iOS自动化构建 xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/D...

    报这个错误的原因是xcode-select不在默认的路径 1.找到xcode-select的当前路径终端命令行 xcode-select --print-path /Library/Developer ...

  8. windows下python安装Numpy、Scipy、matplotlib模块(转载)

    python下载链接     Numpy下载链接 python中Numpy包的安装及使用 Numpy包的安装 准备工作 Python安装 pip安装 将pip所在的文件夹添加到环境变量path路径中 ...

  9. Hadoop自带Sort例子分析

    /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agree ...

  10. Elasticsearch宕机问题

    个人博客:https://blog.sharedata.info/ Elasticsearch 突然宕机,每次重启都只生成错误日志报错信息:## There is insufficient memor ...