FZU 2150 Fire Game(双起点)【BFS】
<题目链接>
题目大意:
两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地方时间为0,蔓延至下一格的时间依次加一。求烧完所有的草需要的最少时间。如不能烧完输出-1。
解题分析:
暴力枚举两个起点,然后用BFS求出这两个火源能够蔓延到最远的草地所花的时间,在那些能够烧完所有草地的情况中,选择用时最少的。
#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
#include <algorithm> typedef long long ll;
const int inf=0x3f3f3f3f;
using namespace std; char M[][],h[][];
int n,m,vis[][],res;
int next[][]={-,,,,,,,-}; struct node
{
int x,y,step;
};
queue<node>q;
vector<node>v; bool judge() //判断是否所有的草全部烧过了
{
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if(M[i][j]=='#'&&vis[i][j]==) return false;
return true;
} int bfs(node a,node b)
{
int num;
memset(vis,,sizeof(vis));
while(!q.empty()) q.pop();
q.push(a);vis[a.x][a.y]=;
q.push(b);vis[b.x][b.y]=;
while(!q.empty())
{
node now=q.front();q.pop();
num=now.step;
node nxt;
for(int i=;i<;i++){
nxt.x=now.x+next[i][];
nxt.y=now.y+next[i][];
nxt.step=now.step+;
if(nxt.x>=&&nxt.y>=&&nxt.x<n&&nxt.y<m&&M[nxt.x][nxt.y]=='#'&&!vis[nxt.x][nxt.y])
{
vis[nxt.x][nxt.y]=;
q.push(nxt);
}
}
}
return num; //num为能够烧到的所有点的最大步数
} int main()
{
int T,ncase=;cin>>T;
while(T--)
{
res=inf;
scanf("%d %d",&n,&m);
getchar();
v.clear();
for(int i=;i<n;i++){
scanf("%s",M[i]);
for(int j=;j<m;j++){
if(M[i][j]=='#'){
node a;a.x=i,a.y=j,a.step=;
v.push_back(a);
}
}
}
for(int i=;i<v.size();i++){
for(int j=i;j<v.size();j++){ //枚举两个起点
int tmp=min(bfs(v[i],v[j]),res);
if(judge())res=min(res,tmp);
}
}
printf("Case %d: ",++ncase);
if(res==inf) printf("-1\n");
else printf("%d\n",res);
}
}
2018-08-29
FZU 2150 Fire Game(双起点)【BFS】的更多相关文章
- fzu 2150 Fire Game 【身手BFS】
称号:fzupid=2150"> 2150 Fire Game :给出一个m*n的图,'#'表示草坪,' . '表示空地,然后能够选择在随意的两个草坪格子点火.火每 1 s会向周围四个 ...
- FZU 2150 Fire Game (暴力BFS)
[题目链接]click here~~ [题目大意]: 两个熊孩子要把一个正方形上的草都给烧掉,他俩同一时候放火烧.烧第一块的时候是不花时间的.每一块着火的都能够在下一秒烧向上下左右四块#代表草地,.代 ...
- FZU 2150 Fire Game 【两点BFS】
Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows, M columns) ...
- FZU 2150 Fire Game(点火游戏)
FZU 2150 Fire Game(点火游戏) Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description - 题目描述 ...
- FZU 2150 fire game (bfs)
Problem 2150 Fire Game Accept: 2133 Submit: 7494Time Limit: 1000 mSec Memory Limit : 32768 KB ...
- FZU 2150 Fire Game (高姿势bfs--两个起点)(路径不重叠:一个队列同时跑)
Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows ...
- FZU 2150 Fire Game (高姿势bfs--两个起点)
Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows ...
- FZU 2150 Fire Game
Fire Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- FZU - 2150 Fire Game bfs+双起点枚举
题意,10*10的地图,有若干块草地“#”,草地可以点燃,并在一秒后点燃相邻的草地.有墙壁‘·‘阻挡.初始可以从任意两点点火.问烧完最短的时间.若烧不完输出-1. 题解:由于100的数据量,直接暴力. ...
随机推荐
- CTSC&APIO2018游记
Day-1 布吉岛干什么,好像只看了Splay Day0 再次布吉岛干什么,好像也只看了Splay 然后上了火车 wc没买方便面,只能吃40元的盒饭 半夜睡不着,那应该是我太菜了 Day1 九点下火车 ...
- 第19月第8天 斯坦福大学公开课机器学习 (吴恩达 Andrew Ng)
1.斯坦福大学公开课机器学习 (吴恩达 Andrew Ng) http://open.163.com/special/opencourse/machinelearning.html 笔记 http:/ ...
- BZOJ:1816 [Cqoi2010]扑克牌 (贪心或二分答案)
题面 \(solution:\) 这道题难就难在你能否读懂题目的意思,我们将它翻译一下: 现在我有n根竹子(每根竹子有\(c_i\)节,每节竹子高度为1),我可以通过消耗一点法力值使某一根竹子的某两节 ...
- 运维数据库平台~inception审核规则详解
---恢复内容开始--- 一 简介:这次我们来介绍最核心的审核功能 二 讲解:简单来说 inception就是mysql的二次过滤,何谓二次过滤,我们知道,mysql本身都有自己的审核规则,为业界所通 ...
- JavaScript学习 - 基础(一)
ECMAscript ECMAscript是一个重要的标准,但它并不是JAVAscript唯一的部分,当然,也不是唯一标准化的部分,实际上,一个完整的JAVAscript实现是由一下3个不同的部分组成 ...
- 解决kali linux 开启ssh服务后连接不上的问题
今天在手机端装了NetHunter 想连接PC的kali ,可是怎么都连不上 综合网友的经验: 1.修改sshd_config文件,命令为:vi /etc/ssh/sshd_config 将#Pass ...
- R-CNN论文详解(转载)
这几天在看<Rich feature hierarchies for accurate object detection and semantic segmentation >,觉得作者的 ...
- DMA内存申请--dma_alloc_coherent 及 寄存器与内存【转】
转自:https://blog.csdn.net/ic_soc_arm_robin/article/details/8203933 在项目驱动过程中会经常用到dma传输数据,而dma需要的内存有自己的 ...
- 并发之volatile关键字
volatile关键字 volatile关键字是什么 在上一章我们讲到了并发的的三个概念,那么今天在讲解下在java中可以保证可见性和有序性的一个关键字. volatile关键字 :当变量的值被该关键 ...
- PHP对Url中的汉字进行编码和解码
有的新手朋友们对于url编码解码这个概念,或许有点陌生.但是如果这么说,当我们在浏览各大网页时,可能发现有的url里有一些特殊符号比如#号,&号,_号或者汉字等等,那么为了符合url的规范,存 ...