题目链接click here~~

题目大意】:

两个熊孩子要把一个正方形上的草都给烧掉,他俩同一时候放火烧。烧第一块的时候是不花时间的。每一块着火的都能够在下一秒烧向上下左右四块#代表草地,.代表着不能烧的。问你最少花多少时间能够烧掉。假设烧不掉就输出-1

解题思路】:

数据比較弱的情况下直接暴力枚举每块草坪上能够放的位置,比較高端的写法眼下没有想到。以后想到了文章更新下~~

ps:因为一个细节没注意,导致WA了差点儿一页,还以为FZU 判题出错了。后来突然发现每次从队列里拿出队首的元素,才是和maxx比較时间的最大可能!

代码:

  1. //FZU 2150
  2. #ifndef _GLIBCXX_NO_ASSERT
  3. #include <cassert>
  4. #endif
  5.  
  6. #include <cctype>
  7. #include <cerrno>
  8. #include <cfloat>
  9. #include <ciso646>
  10. #include <climits>
  11. #include <clocale>
  12. #include <cmath>
  13. #include <csetjmp>
  14. #include <csignal>
  15. #include <cstdarg>
  16. #include <cstddef>
  17. #include <cstdio>
  18. #include <cstdlib>
  19. #include <cstring>
  20. #include <ctime>
  21. // C++
  22. #include <algorithm>
  23. #include <bitset>
  24. #include <complex>
  25. #include <deque>
  26. #include <exception>
  27. #include <fstream>
  28. #include <functional>
  29. #include <iomanip>
  30. #include <ios>
  31. #include <iosfwd>
  32. #include <iostream>
  33. #include <istream>
  34. #include <iterator>
  35. #include <limits>
  36. #include <list>
  37. #include <locale>
  38. #include <map>
  39. #include <memory>
  40. #include <new>
  41. #include <numeric>
  42. #include <ostream>
  43. #include <queue>
  44. #include <set>
  45. #include <sstream>
  46. #include <stack>
  47. #include <stdexcept>
  48. #include <streambuf>
  49. #include <string>
  50. #include <typeinfo>
  51. #include <utility>
  52. #include <valarray>
  53. #include <vector>
  54.  
  55. using namespace std;
  56.  
  57. #define rep(i,j,k) for(int i=(int)j;i<(int)k;++i)
  58. #define per(i,j,k) for(int i=(int)j;i>(int)k;--i)
  59. #define lowbit(a) a&-a
  60. #define Max(a,b) a>b?a:b
  61. #define Min(a,b) a>b?b:a
  62. #define mem(a,b) memset(a,b,sizeof(a))
  63.  
  64. typedef long long LL;
  65. typedef unsigned long long LLU;
  66. typedef double db;
  67. const int N=105;
  68. const int inf=0x3f3f3f3f;
  69. int n,m,T;
  70.  
  71. char mat[25][25];
  72. bool vis[N][N];
  73.  
  74. int dir4[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
  75. int dir8[8][2]= {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
  76. int dir6[6][3]= {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};///六个方向
  77.  
  78. struct node
  79. {
  80. int Coor_x;
  81. int Coor_y;
  82. int step;
  83. } q,p,mapp[N];
  84.  
  85. bool ok(int dx,int dy)
  86. {
  87. if(dx>=0&&dx<n&&dy>=0&&dy<m) return true;
  88. return false;
  89. }
  90. int ans;
  91. void getMat()
  92. {
  93. ans=0;
  94. for(int i=0; i<n; ++i){
  95. scanf("%s",mat[i]);
  96. for(int j=0; j<m; ++j){
  97. if(mat[i][j]=='#'){
  98. ans++;
  99. mapp[ans].Coor_x=i;
  100. mapp[ans].Coor_y=j;
  101. }
  102. }
  103. }
  104. }
  105. int bfs(int x1,int y1,int x2,int y2)
  106. {
  107. int maxx=0;
  108. q.Coor_x=x1,q.Coor_y=y1,q.step=0;
  109. p.Coor_x=x2,p.Coor_y=y2,p.step=0;
  110. queue <node> vall;
  111. vall.push(q);
  112. vall.push(p);
  113. while(!vall.empty()){
  114. node q1,p1=vall.front();
  115. vall.pop();
  116. for(int i=0; i<4; ++i){
  117. int dx=p1.Coor_x+dir4[i][0];
  118. int dy=p1.Coor_y+dir4[i][1];
  119. if(ok(dx,dy)&&!vis[dx][dy]&&mat[dx][dy]=='#'){
  120. vis[dx][dy]=true;
  121. q1.Coor_x=dx;
  122. q1.Coor_y=dy;
  123. q1.step=p1.step+1;
  124. vall.push(q1);
  125. }
  126. }
  127. maxx=Max(maxx,p1.step);///大坑。,注意和vall.front() 比較
  128. }
  129. return maxx;
  130. }
  131. int main()
  132. {
  133. scanf("%d",&T);
  134. int tot=1;
  135. while(T--){
  136. scanf("%d%d",&n,&m);
  137. getMat();
  138. printf("Case %d: ",tot++);
  139. if(ans<=2){
  140. puts("0");
  141. continue;
  142. }
  143. int minn=inf;
  144. for(int i=0; i<ans; ++i){
  145. for(int j=i; j<ans; ++j){
  146. mem(vis,false);
  147. vis[mapp[i].Coor_x][mapp[i].Coor_y]=true;
  148. vis[mapp[j].Coor_x][mapp[j].Coor_y]=true;
  149. bool flag=false;
  150. int _minn=bfs(mapp[i].Coor_x,mapp[i].Coor_y,mapp[j].Coor_x,mapp[j].Coor_y);
  151. for(int k=0; k<n; ++k){
  152. for(int l=0; l<m; ++l){
  153. if(mat[k][l]!='#') continue;
  154. if(!vis[k][l]){
  155. flag=true;
  156. break;
  157. }
  158. }
  159. }
  160. if(!flag) minn=Min(_minn,minn);
  161. }
  162. }
  163. if(minn==inf) puts("-1");
  164. else printf("%d\n",minn);
  165. }
  166. return 0;
  167. }

FZU 2150 Fire Game (暴力BFS)的更多相关文章

  1. FZU 2150 fire game (bfs)

    Problem 2150 Fire Game Accept: 2133    Submit: 7494Time Limit: 1000 mSec    Memory Limit : 32768 KB ...

  2. FZU 2150 Fire Game(BFS)

    点我看题目 题意 :就是有两个熊孩子要把一个正方形上的草都给烧掉,他俩同时放火烧,烧第一块的时候是不花时间的,每一块着火的都可以在下一秒烧向上下左右四块#代表草地,.代表着不能烧的.问你最少花多少时间 ...

  3. FZU 2150 Fire Game(点火游戏)

    FZU 2150 Fire Game(点火游戏) Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description - 题目描述 ...

  4. fzu 2150 Fire Game 【身手BFS】

    称号:fzupid=2150"> 2150 Fire Game :给出一个m*n的图,'#'表示草坪,' . '表示空地,然后能够选择在随意的两个草坪格子点火.火每 1 s会向周围四个 ...

  5. FZU 2150 Fire Game

    Fire Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  6. (FZU 2150) Fire Game (bfs)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2150 Problem Description Fat brother and Maze are playing ...

  7. foj 2150 Fire Game(bfs暴力)

         Problem Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M ...

  8. FZU 2150 Fire Game 广度优先搜索,暴力 难度:0

    http://acm.fzu.edu.cn/problem.php?pid=2150 注意这道题可以任选两个点作为起点,但是时间仍足以穷举两个点的所有可能 #include <cstdio> ...

  9. FZU Problem 2150 Fire Game(bfs)

    这个题真要好好说一下了,比赛的时候怎么过都过不了,压点总是出错(vis应该初始化为inf,但是我初始化成了-1....),wa了n次,后来想到完全可以避免这个问题,只要入队列的时候判断一下就行了. 由 ...

随机推荐

  1. QT+模态对话框与非模态对话框

    #include "mainwindow.h" #include <QMenuBar> #include <QMenu> #include <QAct ...

  2. vueshengmingzhouqi

    首先,每个Vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期.首先看一张图吧~这是官方文档上的图片相信大家一定都会很熟悉: 可以看到在vue一整个的生命周期中会有很多钩子函 ...

  3. [LOJ] 分块九题 3

    https://loj.ac/problem/6279 区间修改,区间查询前驱. TLE无数,我觉得这代码最精髓的就是block=1000. 谜一样的1000. 两个启示: 块内可以维护数据结构,比如 ...

  4. Linux硬盘的检测--smartctl详细介绍

    概述  随着硬盘容量.速度的快速发展,硬盘的可靠性问题越来越重要,今天的单块硬盘存储容量可轻松达到1TB,硬盘损坏带来的影响非常巨大.不同的文件系统(xfs,reiserfs,ext3)都有自己的检测 ...

  5. logging日志模块配置

    logging日志模块 日志级别 日志一共分成5个等级,从低到高分别是: 1)DEBUG 2)INFO 3)WARNING 4)ERROR 5)CRITICAL 说明: DEBUG:详细的信息,通常只 ...

  6. 安装完Centos 7后的一些处理

    1.安装dkms:dkms-2.2.0.3-31.1.noarch.rpm 2.安装显卡驱动:amdgpu-pro-18.10-572953 3.启动图形界面使用init 5 不能使用startx

  7. 用spring annotation声明的bean,当打包在jar中时,无法被扫描到

    发现一个问题,十分蛋疼. 我们项目是由N个工程组成的,外围工程是web工程,内部的工程打包成jar,放入外围工程的WEB-INF/lib 内部的工程用到了spring的注解,例如@Service.@C ...

  8. 安装weblogic时,运行configure.cmd报错、闪退、无法创建域

    直接运行configure.cmd时在jar包加载完成时,不提示创建域的过程,而是直接退出程序 命令行: cd /d F:\00uep_rfs\wls1212_dev\wls12120 切换至解压路径 ...

  9. HDU1711 最基础的kmp算法

    Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], .... ...

  10. NOIP2013D1T3货车运输(最大生成树+倍增lca)

    传送门 这道题,先用kruskal求一遍图中的最大生成树. 然后,倍增求lca,求lca的同时求出边权的最小值. #include <cstring> #include <cstdi ...