--> Fire Game

直接写中文了

Descriptions:

两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地方时间为0,蔓延至下一格的时间依次加一。求烧完所有的草需要的最少时间。如不能烧完输出-1。

Input

第一行,输入一个T,表示有T组测试数据。 每组数据由一个n,m分别表示行列

1 <= T <=100, 1 <= n <=10, 1 <= m <=10

Output

输出最少需要的时间

Sample Input

4
3 3
.#.
###
.#.
3 3
.#.
#.#
.#.
3 3
...
#.#
...
3 3
###
..#
#.#

Sample Output

Case 1: 1
Case 2: -1
Case 3: 0
Case 4: 2

题目链接:

https://vjudge.net/problem/FZU-2150

感觉还是有一定难度的,肯定是要从两个地方开始dfs的,这两个地方一定是干草,同时这两个地方可以重叠,那么就直接把所有的干草全部列举出来,每次取两个去dfs,然后取这些dfs的最小值即可,具体操作看代码

AC代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define ME0(x) memset(x,0,sizeof(x))
using namespace std;
int T,n,m,total,cnt;
char mp[][];//原始地图
int vis[][];//记录是否烧过
int dt[][]= {{,},{-,},{,},{,-}};//方向
struct node
{
int x,y;//横纵坐标
int step;//步数
};
node now,next;
node a[*];//干草坐标
bool judge()//判断草地是否全部烧完
{
for(int i=; i<total; i++)
if(!vis[a[i].x][a[i].y])
return false;
return true;
}
int bfs(node a,node b)
{
int steps=;//初始步数为0
ME0(vis);
queue<node>q;
q.push(a),q.push(b);
vis[a.x][a.y]=,vis[b.x][b.y]=;
while(!q.empty())
{
now=q.front();
q.pop();
for(int i=; i<; i++)//分4个方向测试
{
next.x=now.x+dt[i][];
next.y=now.y+dt[i][];
next.step=now.step+;
//是否满足条件
if(next.x>=&&next.x<n&&next.y>=&&next.y<m&&mp[next.x][next.y]=='#'&&!vis[next.x][next.y])
{
vis[next.x][next.y]=;
steps=max(steps,next.step);
q.push(next);
}
}
}
if(judge())//判断
return steps;
else
return INF;
}
int main()
{
cnt=;//第几组测试数据
cin>>T;
while(T--)
{
total=;//有多少干草
cin>>n>>m;
for(int i=; i<n; i++)
{
for(int j=; j<m; j++)
{
cin>>mp[i][j];
if(mp[i][j]=='#')//把干草存入数组
{
a[total].x=i;
a[total].y=j;
a[total++].step=;
}
}
}
int ans=INF;
for(int i=; i<total; i++)
{
for(int j=i; j<total; j++)
{
ans=min(bfs(a[i],a[j]),ans);//每次都取步数最小的值
}
}
// for(int i=0; i<total; i++)
// cout<<a[i].x<<" "<<a[i].y<<endl;
printf("Case %d: ",cnt++);
if(ans==INF)
cout<<-<<endl;
else
cout<<ans<<endl;
}
}

【FZU - 2150】Fire Game(bfs)的更多相关文章

  1. 【HDU - 2102】A计划(bfs)

    -->A计划 Descriptions: 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的 ...

  2. 【POJ - 3669】Meteor Shower(bfs)

    -->Meteor Shower Descriptions: Bessie听说有场史无前例的流星雨即将来临:有谶言:陨星将落,徒留灰烬.为保生机,她誓将找寻安全之所(永避星坠之地).目前她正在平 ...

  3. 【POJ 2251】Dungeon Master(bfs)

    BUPT2017 wintertraining(16) #5 B POJ - 2251 题意 3维的地图,求从S到E的最短路径长度 题解 bfs 代码 #include <cstdio> ...

  4. 【HIHOCODER 1478】 水陆距离(BFS)

    描述 给定一个N x M的01矩阵,其中1表示陆地,0表示水域.对于每一个位置,求出它距离最近的水域的距离是多少. 矩阵中每个位置与它上下左右相邻的格子距离为1. 输入 第一行包含两个整数,N和M. ...

  5. 【POJ - 3126】Prime Path(bfs)

    Prime Path 原文是English 这里直接上中文了 Descriptions: 给你两个四位的素数a,b.a可以改变某一位上的数字变成c,但只有当c也是四位的素数时才能进行这种改变.请你计算 ...

  6. 【Win10 UWP】QQ SDK(二):SDK的回调处理

    上一讲,我们介绍了QQ SDK的使用方法,请看<[Win10 UWP]QQ SDK(一):SDK基本使用方法> 一. 回调的基本形式 从前面的介绍中我们知道,我们的应用和QQ客户端之间需要 ...

  7. 【Win10 UWP】QQ SDK(一):SDK基本使用方法

    每当开发一个应用需要社交分享的应用时,总是心里咯噔一下:到底什么时候分享能加上QQ和微信?除了WP8.0版本的微信SDK,官方似乎从未正面发布过适应时代发展的QQ SDK,就连后台,也没有一个可以创建 ...

  8. 【UOJ#242】【UR#16】破坏蛋糕(计算几何)

    [UOJ#242][UR#16]破坏蛋糕(计算几何) 题面 UOJ 题解 为了方便,我们假定最后一条直线是从上往下穿过来的,比如说把它当成坐标系的\(y\)轴. 于是我们可以处理出所有交点,然后把它们 ...

  9. 【UOJ#386】【UNR#3】鸽子固定器(贪心)

    [UOJ#386][UNR#3]鸽子固定器(贪心) 题面 UOJ 题解 一个不难想到的暴力做法是把东西按照\(s\)排序,这样子我们枚举极大值和极小值,那么我们选择的一定是这一段之间\(v\)最大的那 ...

随机推荐

  1. Java-ZipUtil工具类

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...

  2. ASP.NET MVC5入门指南(2)*入门介绍*创建您的第一个应用

    开始吧 首先安装Visual Studio 2017.然后,打开Visual Studio. Visual Studio是一个IDE或集成开发环境.就像使用Microsoft Word编写文档一样,您 ...

  3. pyinstall python文件打包成二进制exe文件

    pycharm + python3 + win7 1 pip install pyinstall  (官网) 2 准备 .py 文件 3 具体例子 from PyQt5.QtWidgets impor ...

  4. jQuery.getJSON(url, [data], [callback])

    jQuery.getJSON(url, [data], [callback]) 概述 通过 HTTP GET 请求载入 JSON 数据. 在 jQuery 1.2 中,您可以通过使用JSONP形式的回 ...

  5. Windows下如何禁止优盘自动播放、自动运行

     造冰箱的大熊猫@cnblogs 2019/1/28 为了防范层出不穷的病毒和木马,如何禁止插入优盘后Windows自动播放优盘或运行优盘程序? 运行环境:Windows 7 1)点击Windows开 ...

  6. Android源码开发利器——Java源码调试(基于4.1.2)

     原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038     调试Android Java源码 草帽的后花园——Neo 写在之前的 ...

  7. android自定义键盘(解决弹出提示的字体颜色问题)

    最近准备要做一个项目,需要用到自定义小键盘来确保安全,而且还需要精确获得用户点击键盘时的落点位置.力度.指尖接触屏幕的面积等参数. 在写自定义键盘的时候,用到了国内网上的一些代码,出处是 向先人致敬! ...

  8. BZOJ 4221 [JOI2012春季合宿]Kangaroo (DP)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4221 题解 orz WYC 爆切神仙DP 首先将所有袋鼠按大小排序.考虑从前往后DP, ...

  9. Linux之tomcat安装与配置

    1.创建目录 [root@bogon tomcat]#mkdir /usr/local/java/tomcat 2.上传压缩包并解压 [root@bogon tomcat]# tar xvf apac ...

  10. error while loading shared libraries: libXXXX.so: cannot open shared object file: No such file or directory

    出现这个问题的原因是运行程序缺少依赖库,或者运行程序的依赖库缺少依赖库,可能你的本地目录下面就有这个库文件,但是linux搜索路劲不会从当前路径下去搜索:这种情况可能出现在切换环境上,可能你在一个li ...