Problem 2150 Fire Game

Accept: 2185    Submit: 7670
Time Limit: 1000 mSec    Memory Limit :
32768 KB

Problem Description

Fat brother and Maze are playing a kind of special (hentai) game on an N*M
board (N rows, M columns). At the beginning, each grid of this board is
consisting of grass or just empty and then they start to fire all the grass.
Firstly they choose two grids which are consisting of grass and set fire. As we
all know, the fire can spread among the grass. If the grid (x, y) is firing at
time t, the grid which is adjacent to this grid will fire at time t+1 which
refers to the grid (x+1, y), (x-1, y), (x, y+1), (x, y-1). This process ends
when no new grid get fire. If then all the grid which are consisting of grass is
get fired, Fat brother and Maze will stand in the middle of the grid and playing
a MORE special (hentai) game. (Maybe it’s the OOXX game which decrypted in the
last problem, who knows.)

You can assume that the grass in the board would never burn out and the empty
grid would never get fire.

Note that the two grids they choose can be the same.

Input

The first line of the date is an integer T, which is the number of the text
cases.

Then T cases follow, each case contains two integers N and M indicate the
size of the board. Then goes N line, each line with M character shows the board.
“#” Indicates the grass. You can assume that there is at least one grid which is
consisting of grass in the board.

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

Output

For each case, output the case number first, if they can play the MORE
special (hentai) game (fire all the grass), output the minimal time they need to
wait after they set fire, otherwise just output -1. See the sample input and
output for more details.

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
 
 
题意:两个“变态”在给定的区域内烧草坪,给定区域为N*M的矩形阵,起先两个人同时各选定矩阵中的一块草坪并开始烧,并且火会蔓延,只考虑当前草坪的上下左右四个格子,如果这些临近的格子中有草坪,那么火会蔓延至临近的格子中,此时火延续的时间加1.
问两个人分别应该选定哪两块草坪开始烧,使得火以最短的时间烧完矩阵中所有的草坪,如果火灭了任然还有草坪没被烧,则判定为失败,输出-1,否则输出火的最短延续时间.
思路:广度优先搜索,从两个点起始点同时开始搜索即可。
AC代码:

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<cstring>
using namespace std;
const int N_MAX = + ;
int N,M;
char field[N_MAX][N_MAX];
bool vis[N_MAX][N_MAX];
int dx[] = { -,,, };
int dy[] = { ,,-, };
queue<pair<int,int> >que;
int num[N_MAX][N_MAX]; int bfs(int x1,int y1,int x2,int y2) {//返回 烧完所有草需要的时间
memset(vis, , sizeof(vis));//记录走过的点
memset(num, , sizeof(num));//记录到达某点的时间
int Max=;
que.push(make_pair(x1,y1));
que.push(make_pair(x2, y2));
vis[x1][y1] = vis[x2][y2] = ;
while (!que.empty()) {
int xx=que.front().first;
int yy = que.front().second;
que.pop();
for (int i = ; i < ; i++) {
int x = xx + dx[i];
int y = yy + dy[i];
if (x >= && x < N&&y >= && y < M&&!vis[x][y]&&field[x][y] == '#') {
vis[x][y] = true;
que.push(make_pair(x, y));
num[x][y] = num[xx][yy]+;
if (Max < num[x][y])Max = num[x][y];
}
}
}
for (int i = ; i < N;i++)
for (int j = ; j < M; j++)
if (field[i][j] == '#'&&!vis[i][j]) {
Max = INT_MAX;
} return Max;
} int main() {
int T,number;
scanf("%d", &T);
int cs = ;
while (T--) {
number = ;
cs++;
scanf("%d%d",&N,&M);
memset(field, , sizeof(field));
for (int i = ; i < N;i++) {
for (int j = ; j < M;j++) {
scanf(" %c",&field[i][j]);
if (field[i][j] == '#')
number++;
}
}
if (number <= ) {//!!!!草坪数小于2不用搜索了
printf("Case %d: %d\n", cs, );
continue;
}
int min_time=INT_MAX;
for (int i = ; i < N*M;i++) {
int x1 = i / M; int y1 = i%M;
if (field[x1][y1] != '#')continue;
for (int j = i+; j < N*M;j++) {
int x2 = j / M; int y2 = j%M;
if (field[x2][y2] != '#')continue;
int tmp= bfs(x1, y1, x2, y2);
if (tmp < min_time)
min_time = tmp;
}
} if (min_time == INT_MAX)min_time = -;
printf("Case %d: %d\n",cs,min_time); }
return ;
}

FZOJ Problem 2150 Fire Game的更多相关文章

  1. FZU Problem 2150 Fire Game

    Problem 2150 Fire Game Accept: 145    Submit: 542 Time Limit: 1000 mSec    Memory Limit : 32768 KB P ...

  2. FZU Problem 2150 Fire Game(bfs)

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

  3. FZU 2150 fire game (bfs)

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

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

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

  5. fzu 2150 Fire Game 【身手BFS】

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

  6. UVA Problem B: Fire!

    Problem B: Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and t ...

  7. FZOJ Problem 2219 StarCraft

                                                                                                        ...

  8. BFS(两点搜索) FZOJ 2150 Fire Game

    题目传送门 题意:'#'表示草地,两个人在草地上点火,相邻的草地会烧起来,每烧一格等1秒,问最少要等几秒草地才烧完 分析:这题和UVA 11624 Fire!有点像,那题给定了两个点,这题两点不确定, ...

  9. FZU 2150 Fire Game

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

随机推荐

  1. ubuntu k8s 命令补全

    apt install bash-completion // locate bash_completion source /usr/share/bash-completion/bash_complet ...

  2. vector 下标操作

    比如:vector<int> ivec(3).. 当采用下标操作ivec[10]的时候,该操作是未定义的,在自己的机器上输出的值是零.建议使用迭代器进行操作.

  3. 关于flyme5显示不到和卸载不到旧应用解决方法

    笔者买入一台mx5,升级flyme5后旧应用没有显示出来,而且在设置的应用管理都没显示旧应用. 通过adb命令: adb shell pm list packages显示所有包名, 查看自己要删除应用 ...

  4. SDWebImage解析

    SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下 ...

  5. QQ 发送邮件

    之前也发布过一篇QQ发邮件的,后来那种方法在阿里云服务器中报错了,查了好久才发现,是阿里云的服务器把 25 端口 给封杀了.现在重新做了个功能. public static string UserNa ...

  6. 深入理解ES6箭头函数的this以及各类this面试题总结

    ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取this的特性,俘获了大批粉丝儿 它也可能是面试中的宠儿, 我们关键要搞清楚 箭头函数和普通函数中的this 一针见血式总结: 普通函数中的 ...

  7. Docker 守护进程的配置和操作 & 远程访问

    守护进程的配置和操作 1.查看守护进程 linux命令: ps -ef | gerp docker sudo status docker 2.开启关闭重启守护进程 sudo service docke ...

  8. Linux 命令、配置文件及操作

    Linux 命令.配置文件及操作 命令 命令 参数 说明 A alias.unalias 命令别名 B C cat 查看文件内容 cd 切换目录 chown 修改拥有着 chgrp 修改所属组 chm ...

  9. 4.layhm框架初始化准备Init

    hm\core\Boot 里 Boot 里run() 自动开起session 设置时区 <?php /** * Created by Haima. * Author:Haima * QQ:228 ...

  10. GoF23种设计模式之行为型模式之迭代器模式

    一.概述    给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.二.适用性1.当访问一个聚合对象的内容而无需暴露它的内部表示的时候.2.当对聚合对象的多 ...