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 的基础上,全部重写了代码,并优化了架构,性能上和逻辑上都大大提升.只需要几行代码,即可验证用户输入,并 ...
随机推荐
- telerik:RadAsyncUpload 使用 时不执行上传事件的解决办法AsyncUpload1_FileUploaded(object sender, FileUploadedEventArgs e)
一般是因为web.config没有配置的原因! 只要在<handlers>下加上 <add name="Telerik.Web.UI.WebResource" v ...
- Java_Web之宠物管理系统
使用JSP+servLet实现宠物管理系统,oraC1e11g作为后台数据厍,实现查看宠物和增加宠物的功能由你实现,如图: 其中宠物包栝:狗.猫.鸟.鼠 具体要求及推荐实现步骤 第一步:创建数据库代码 ...
- texi格式文件的读取
使用texi2html可以将texi格式的文件转换成html格式的文件. sudo apt-get install texi2html 在对应目录下 texi2html filename.texi 或 ...
- 【sqli-labs】 less24 POST- Second Order Injections *Real treat* -Stored Injections (POST型二阶注入 *真的好玩?* 存储注入)
简单登陆浏览一遍后,发现是一个登陆注册修改密码的应用 审查一下代码 登陆页面的username,password使用了转义 注册页面的参数也进行了转义处理 但是在修改password的页面,直接从se ...
- emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题
想要更详细了解pjax,需要查看官网 或者看本站文章:jQuery.pjax.js:使用AJAX和pushState无刷新加载网页(官网教程中文翻译) 效果看本站,音乐无刷新播放,代码高亮和复制js加 ...
- BZOJ 3319: 黑白树 树+并查集+未调完+神题
Code: #include<bits/stdc++.h> #define maxn 1000003 using namespace std; char *p1,*p2,buf[10000 ...
- Git server出现cache大回收分析
实例 git server是一个io密集型的服务,当cache量很大的时候,cache会全部一次释放,导致那么一瞬间,IO read压力很大,因为,用户的大量请求,需要重新从磁盘读到内存,但是这个时刻 ...
- 填坑...P1546 最短网络 Agri-Net
P1546 最短网络 Agri-Net 难度普及/提高- 时空限制1s / 128MB 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要 ...
- 使用Linux自带的命令logrotate对Nginx日志进行切割
说明: Nginx安装目录:/usr/local/nginx/Nginx日志目录:/var/log/nginx/error/*.log /var/log/nginx/access/w1/*.log / ...
- Emacs学习笔记之主模式笔记
% 模式相关—————————————————————————— 这里经常用的也就各种语言相对应的模式,有些就没再写进去,比如f90等模式 Fundamental mode 基本模式 ...