题目链接click here~~

题目大意】:

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

解题思路】:

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

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

代码:

//FZU 2150
#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif #include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector> using namespace std; #define rep(i,j,k) for(int i=(int)j;i<(int)k;++i)
#define per(i,j,k) for(int i=(int)j;i>(int)k;--i)
#define lowbit(a) a&-a
#define Max(a,b) a>b?a:b
#define Min(a,b) a>b?b:a
#define mem(a,b) memset(a,b,sizeof(a)) typedef long long LL;
typedef unsigned long long LLU;
typedef double db;
const int N=105;
const int inf=0x3f3f3f3f;
int n,m,T; char mat[25][25];
bool vis[N][N]; int dir4[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
int dir8[8][2]= {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
int dir6[6][3]= {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};///六个方向 struct node
{
int Coor_x;
int Coor_y;
int step;
} q,p,mapp[N]; bool ok(int dx,int dy)
{
if(dx>=0&&dx<n&&dy>=0&&dy<m) return true;
return false;
}
int ans;
void getMat()
{
ans=0;
for(int i=0; i<n; ++i){
scanf("%s",mat[i]);
for(int j=0; j<m; ++j){
if(mat[i][j]=='#'){
ans++;
mapp[ans].Coor_x=i;
mapp[ans].Coor_y=j;
}
}
}
}
int bfs(int x1,int y1,int x2,int y2)
{
int maxx=0;
q.Coor_x=x1,q.Coor_y=y1,q.step=0;
p.Coor_x=x2,p.Coor_y=y2,p.step=0;
queue <node> vall;
vall.push(q);
vall.push(p);
while(!vall.empty()){
node q1,p1=vall.front();
vall.pop();
for(int i=0; i<4; ++i){
int dx=p1.Coor_x+dir4[i][0];
int dy=p1.Coor_y+dir4[i][1];
if(ok(dx,dy)&&!vis[dx][dy]&&mat[dx][dy]=='#'){
vis[dx][dy]=true;
q1.Coor_x=dx;
q1.Coor_y=dy;
q1.step=p1.step+1;
vall.push(q1);
}
}
maxx=Max(maxx,p1.step);///大坑。,注意和vall.front() 比較
}
return maxx;
}
int main()
{
scanf("%d",&T);
int tot=1;
while(T--){
scanf("%d%d",&n,&m);
getMat();
printf("Case %d: ",tot++);
if(ans<=2){
puts("0");
continue;
}
int minn=inf;
for(int i=0; i<ans; ++i){
for(int j=i; j<ans; ++j){
mem(vis,false);
vis[mapp[i].Coor_x][mapp[i].Coor_y]=true;
vis[mapp[j].Coor_x][mapp[j].Coor_y]=true;
bool flag=false;
int _minn=bfs(mapp[i].Coor_x,mapp[i].Coor_y,mapp[j].Coor_x,mapp[j].Coor_y);
for(int k=0; k<n; ++k){
for(int l=0; l<m; ++l){
if(mat[k][l]!='#') continue;
if(!vis[k][l]){
flag=true;
break;
}
}
}
if(!flag) minn=Min(_minn,minn);
}
}
if(minn==inf) puts("-1");
else printf("%d\n",minn);
}
return 0;
}

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. vue与node和npm关系

    (1)node功能 准确的说是使用vue-cli 脚手架搭建项目的时候需要nodejs.也可以用script标签引入vue.min.js这样的,在js里实例化vue也行. 使用node有几件事,打包部 ...

  2. vmware linux虚拟机与本地物理机共享文件夹

    cd /mnt/hgfs 使用Vmware安装了linux虚拟机后,开发时,为了方便文件的传输等,因此需要使用共享文件夹,减少工作量.共享文件夹需要用到vmware提供的vmware tools工具, ...

  3. C# string补位

    参考:https://www.cnblogs.com/zhangqs008/archive/2012/02/01/2341078.html //1.1.左补位 "; , 'A'); //1. ...

  4. 任务二:零基础HTML及CSS编码(一)

    面向人群: 零基础或初学者 难度: 简单 重要说明 百度前端技术学院的课程任务是由百度前端工程师专为对前端不同掌握程度的同学设计.我们尽力保证课程内容的质量以及学习难度的合理性,但即使如此,真正决定课 ...

  5. 洛谷P2802 回家

    贱呼呼的搜索题 这个最贱的还是在于路途的标记,大部分的题目路途的标记是直接标记即可也就是说我走过了这个点,那么这个点标记上以后不再走,这个题不是,我走过了,但是我可能回了血我又继续走 所以说我们标记的 ...

  6. 简单DP内容

    1. 最长上升子序列 [题目描述] 给定N个数,求这N个数的最长上升子序列的长度. [样例输入] 7 2 5 3 4 1 7 6 [样例输出] 4 第一种解法:时间复杂度O(n^2), 状态设计:DP ...

  7. 如何用纯 CSS 创作一个同心圆弧旋转 loader 特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/OZmXQX 可交互视频教程 此视 ...

  8. 分享下找到的Github上大神的EmpireofCode进攻策略:反正我是用了没反应,改了代码后单位不进攻,蠢站在那里,我自己的策略调调能打败不少人,这个日后慢慢研究吧,Github上暂时找到的唯一策略

    from queue import PriorityQueue from enum import Enum from battle import commander from battle impor ...

  9. 利用scrapy获取抽屉新热榜的标题和内容以及新闻地址保存到本地

    1.安装scrapy pip3 install scrapy 2.打开terminal,cd 到想要创建程序的目录下 3.创建一个scrapy项目 在终端输入:scrapy startproject ...

  10. CSS中display对布局的影响以及元素display的默认值

    比如div元素,它的默认display属性值为“block”,成为“块级”元素(block-level):而span元素的默认display属性值为“inline”,称为“行内”元素.