FZU2150 Fire Game
题目:
两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地方时间为0,蔓延至下一格的时间依次加一。求烧完所有的草需要的最少时间。如不能烧完输出-1。
输入:
第一行,输入一个T,表示有T组测试数据。 每组数据由一个n,m分别表示行列
1 <= T <=100, 1 <= n <=10, 1 <= m <=10
输出:
输出最少需要的时间>
样例:

分析:双起点的BFS,本质上就是枚举两个起点同时压入队列;
注意题目要求走过所有’#‘,所以BFS的循环不需要手动退出; 当’#‘个数<=2时需要特判
#include<iostream>
#include<sstream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<numeric>
#include<cmath>
#include<queue>
#include<vector>
#include<set>
#include<cctype>
#define PI acos(-1.0)
const int INF = 0x3f3f3f3f;
const int NINF = -INF - ;
typedef long long ll;
using namespace std;
int n, m;
int num;
char maze[][];
typedef pair<int, int> P;
P rec[];//rec用于存储’#‘的数量及坐标位置
int d[][], used[][];
int dx[] = {-, , , }, dy[] = {, , , -};
int bfs(P x, P y)
{
queue<P> q;
for (int i = ; i < n; ++i)
{
for (int j = ; j < m; ++j)
d[i][j] = INF;
}
memset(used, , sizeof(used));
q.push(x), q.push(y);
d[x.first][x.second] = , d[y.first][y.second] = ;
used[x.first][x.second] = , used[y.first][y.second] = ;
P temp;//用于存储队列front的pair定义在这是为了在队列被取尽后,循环外能得到最后一次循环的d值
//cout << x.first << ',' << x.second << ' ' << y.first << ',' << y.second << endl;
while (q.size())
{
temp = q.front();
//cout << temp.first << ' ' << temp.second << endl;
q.pop();
for (int i = ; i < ; ++i)
{
int nx = temp.first + dx[i], ny = temp.second + dy[i];
if (nx >= && nx < n && ny >= && ny < m && !used[nx][ny] && maze[nx][ny] != '.')
{
used[nx][ny] = ;
q.push(P(nx, ny));
d[nx][ny] = d[temp.first][temp.second] + ;
}
}
}
//cout << d[x.first][x.second] << ' ' << d[y.first][y.second] << endl;
for (int i = ; i < num; ++i)
{
if (d[rec[i].first][rec[i].second] == INF)//仍存在未烧到的’#‘
return INF;
}
return d[temp.first][temp.second];
}
int main()
{
int T, t = ;
cin >> T;
while (T--)
{
t++;
int ans = INF;
cin >> n >> m;
num = ;
for (int i = ; i < n; ++i)
{
for (int j = ; j < m; ++j)
{
cin >> maze[i][j];
if (maze[i][j] == '#')
rec[num].first = i, rec[num++].second = j;
}
}
if (num <= )//特判
{
cout << "Case " << t << ": " << << endl;
continue;
}
for (int i = ; i < num; ++i)
{
for (int j = i + ; j < num; ++j)
ans = min(ans, bfs(rec[i], rec[j]));
}
if (ans != INF)
cout << "Case " << t << ": " << ans << endl;
else
cout << "Case " << t << ": " << - << endl;
}
return ;
}
FZU2150 Fire Game的更多相关文章
- FZU2150 Fire Game —— BFS
题目链接:https://vjudge.net/problem/FZU-2150 Problem 2150 Fire Game Accept: 2702 Submit: 9240 Time Li ...
- [宽度优先搜索] FZU-2150 Fire Game
Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows, M columns) ...
- FZU2150 Fire Game BFS搜索
题意:就是选两个点出发,只能走草坪,看能不能走完所有的草坪 分析:由于数据范围很小,所有枚举这两个点,事先将所有的草坪点存起来,然后任选两个点走,(两个点可以是同一个点) 然后BFS就行了 注:无解的 ...
- FZU2150 :Fire Game (双起点BFS)
传送门:点我 题意:“#”是草,"."是墙,询问能不能点燃俩地方,即点燃俩“#”,把所有的草烧完,如果可以,那么输出最小需要的时间,如果不行输出-1 思路:暴力BFS,看到n和m都 ...
- 【FZU - 2150】Fire Game(bfs)
--> Fire Game 直接写中文了 Descriptions: 两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地 ...
- 关于SequeezeNet中的Fire Module
在论文<SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE>中,作者 ...
- FZU 2150 Fire Game
Fire Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- Fire
Fire 分析: 首先,明确题意:b1,b2,--,bn 交换为b2,--,bn,b1,但这并不是意味着只能从b1开始交换,(这点从样例中可以看出),并且也不意味着交换的必须是连续的一串,可以是几个单 ...
- Android 轻量级输入校验库:Fire Eye
Fire Eye是一款轻量级简单易用的Android校验库. FireEye 2.0 在 1.0 的基础上,全部重写了代码,并优化了架构,性能上和逻辑上都大大提升.只需要几行代码,即可验证用户输入,并 ...
随机推荐
- C#关闭退出线程的几种方法
.Application.Exit(); //强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出: .System.Environment.Exit(); //无论在主线 ...
- Boost-QT兼容问题:#define FUSION_HASH #
使用原始的MSVC10+QT48很长时间,需要把PCL升级到新的版本,不再使用自行编译的PCL1.7.2版本. 在使用MSVC2012的时候,使用MSVC12-的PCL1.8.0版本,出现了一个不大不 ...
- ROS:Nvidia Jetson TK1平台安装使用ROS
原文连接: http://wiki.ros.org/indigo/Installation/UbuntuARM Ubuntu ARM install of ROS Indigo There are c ...
- 时序分析:串匹配—Brute-Force算法
在使用KMP算法之前,使用了BF算法用于串匹配:原文链接已无法查找..... 设有主串s和子串t,子串t的定位就是要在主串s中找到一个与子串t相等的子串.通常把主串s称为目标串,把子串t ...
- (转)基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理
http://www.cnblogs.com/wuhuacong/p/4757984.html 最近一直很多事情,博客停下来好久没写了,整理下思路,把最近研究的基于Metronic的Bootstrap ...
- (转)Arcgis for JS实现台风运动路径与影像范围的显示
http://blog.csdn.net/gisshixisheng/article/details/42025435 首先,看看具体的效果: 初始化状态 绘制中 绘制完成 首先,组织数据.我组织的数 ...
- scala类型系统:24) 理解 higher-kinded-type
首先我们从最基本的泛型来看: 现在我们对上面泛型中的类型参数再进一步,也是个泛型会如何呢? 可以看到,java中不支持类型参数也是泛型类型的情况,而scala支持.这是一个很重要的区别,scala在类 ...
- Memcached 之取模与哈希算法命中率实验
当5台memcache服务器中有一台宕机时的命中率实验. 一.php实现代码 1. config.php $server = array( "A" => array(&quo ...
- Coreldraw软件反盗版提示x8有优惠活动 cdr x8提示盗版怎么办?
CorelDRAW X8装不上,我的悲伤有这么大,或者比这还大一点...♥♥♥如果你遇到这样的断了网,卸了装,装了卸,然后再安装的...╮(-_-)╭这样的保存和另存为都点不了,不敢关电脑的亦或是这样 ...
- uni-app强大的前端框架,h5,原生app(两大系统),微信小程序
最近发现一款强大的前端框架,它叫uni-app 这是一款通用的框架可以打包app,h5,微信小程序, 说说要弄这个工具需要会那些技能吧, 要熟悉vue,微信小程序.这样这个框架用的就是很快上手了 模块 ...