【FZU - 2150】Fire Game(bfs)
--> 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)的更多相关文章
- 【HDU - 2102】A计划(bfs)
-->A计划 Descriptions: 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的 ...
- 【POJ - 3669】Meteor Shower(bfs)
-->Meteor Shower Descriptions: Bessie听说有场史无前例的流星雨即将来临:有谶言:陨星将落,徒留灰烬.为保生机,她誓将找寻安全之所(永避星坠之地).目前她正在平 ...
- 【POJ 2251】Dungeon Master(bfs)
BUPT2017 wintertraining(16) #5 B POJ - 2251 题意 3维的地图,求从S到E的最短路径长度 题解 bfs 代码 #include <cstdio> ...
- 【HIHOCODER 1478】 水陆距离(BFS)
描述 给定一个N x M的01矩阵,其中1表示陆地,0表示水域.对于每一个位置,求出它距离最近的水域的距离是多少. 矩阵中每个位置与它上下左右相邻的格子距离为1. 输入 第一行包含两个整数,N和M. ...
- 【POJ - 3126】Prime Path(bfs)
Prime Path 原文是English 这里直接上中文了 Descriptions: 给你两个四位的素数a,b.a可以改变某一位上的数字变成c,但只有当c也是四位的素数时才能进行这种改变.请你计算 ...
- 【Win10 UWP】QQ SDK(二):SDK的回调处理
上一讲,我们介绍了QQ SDK的使用方法,请看<[Win10 UWP]QQ SDK(一):SDK基本使用方法> 一. 回调的基本形式 从前面的介绍中我们知道,我们的应用和QQ客户端之间需要 ...
- 【Win10 UWP】QQ SDK(一):SDK基本使用方法
每当开发一个应用需要社交分享的应用时,总是心里咯噔一下:到底什么时候分享能加上QQ和微信?除了WP8.0版本的微信SDK,官方似乎从未正面发布过适应时代发展的QQ SDK,就连后台,也没有一个可以创建 ...
- 【UOJ#242】【UR#16】破坏蛋糕(计算几何)
[UOJ#242][UR#16]破坏蛋糕(计算几何) 题面 UOJ 题解 为了方便,我们假定最后一条直线是从上往下穿过来的,比如说把它当成坐标系的\(y\)轴. 于是我们可以处理出所有交点,然后把它们 ...
- 【UOJ#386】【UNR#3】鸽子固定器(贪心)
[UOJ#386][UNR#3]鸽子固定器(贪心) 题面 UOJ 题解 一个不难想到的暴力做法是把东西按照\(s\)排序,这样子我们枚举极大值和极小值,那么我们选择的一定是这一段之间\(v\)最大的那 ...
随机推荐
- 简单的了解Servlet的使用
具体使用: 1.实现 Servlet 接口 2.实现 Servlet 接口中 所有的方法 package com.ou.test; import javax.servlet.*; import jav ...
- [Algorithm] Finding all factors of a number
12's factors are: {1,2,3,4,6,12} function factors (n) { let list = []; for (let i = 1; i < Math.s ...
- 【Maven】-maven打包跳过javadoc
有时候由于代码中注释错误(比如方法参数)或者maven javadoc插件版本有问题,导致打包报错,而我们着急打包验证问题,没有时间一一修改错误,这时候可以先跳过生成javadoc,继续下一步工作. ...
- Linux下使用telnet测试端口号是否开放
telnet 127.0.0.1 80调用后,若提示bash: telnet: command not found,那么进行以下步骤: 1.检查telnet是否已经安装,或者有部分未安装: rpm - ...
- JavaScript赋值运算符
赋值运算符 ⑴ "=" 赋值符号 可以将符号右侧的值赋值给符号左侧的变量 ⑵ "+=" 加等于,是一个运算符 不要分开写 a += 5 等价 ...
- [PWN]fsb with stack frame
0x00: 格式化字符串漏洞出现的时间很早了,偶然在前一段时间学到了一个其他的利用姿势,通过栈桢结构去利用格式化字符串漏洞. 原文链接:http://phrack.org/issues/59/7.ht ...
- convert:图片转pdf失败
造冰箱的大熊猫@cnblogs 2019/1/21 1.环境 操作系统/Ubuntu 16.04.5 LTS,内核/4.15.0-43-generic,convert/ImageMagick 6.8 ...
- 使用wait/notify实现生产消费模型
public class A { private Deque<Integer> list = new LinkedList<>(); private int max = 10; ...
- gitk、Git GUI 图形化工具中文显示乱码的解决方案
在Windows下使用gitk.Git-Gui时,可能会出现代码中的中文乱码的情况.解决方法:在软件的安装目录下,在Git\mingw64\etc\gitconfig文件末尾添加: [gui]enco ...
- PHP-过滤器-连接数据库-解析XML
PHP 过滤器 what? PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入. 验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分. 设计 PHP 的过滤器扩展的目的 ...