题目链接:https://vjudge.net/problem/FZU-2150

题意:’ . '代表火无法烧着的地方,‘ # ’表示草,火可以烧着。选择任意两个‘ # ’(可以两个都选同一个 ‘ # ’),火会蔓延,每过1个时间消耗,向四周蔓延。问:能不能把草全部烧完,可以的话得出最短时间,否则输出 -1。

思路:bfs,枚举所有点火情况就OK了,直接看代码吧。


 #include <iostream>
#include <cstring>
#include<vector>
#include<string>
#include <cmath>
#include <map>
#include <queue>
#include <algorithm>
using namespace std; #define inf (1LL << 31) - 1
#define rep(i,j,k) for(int i = (j); i <= (k); i++)
#define rep__(i,j,k) for(int i = (j); i < (k); i++)
#define per(i,j,k) for(int i = (j); i >= (k); i--)
#define per__(i,j,k) for(int i = (j); i > (k); i--) const int N = ;
int mv_x[] = { , , , - };
int mv_y[] = { , -, , };
int x[]; //草的x
int y[]; //草的y
int l; //几颗草
char mp[N][N]; //原始地图
char cp_mp[N][N]; //原始地图副本,用于bfs
bool vis[N][N];
int ans; //答案
int n, m; struct node{
int x, y, c;
node(){}
node(int o, int oo, int ooo){
x = o;
y = oo;
c = ooo;
}
}; inline void input(){ l = ;
rep(i, , n) rep(j, , m){
cin >> mp[i][j]; //记录下所有草
if (mp[i][j] == '#'){
x[l] = i;
y[l++] = j;
}
}
} //每种情况前,初始化函数
inline void init_vis_And_cp_mp(){
memset(vis, , sizeof(vis));
memcpy(cp_mp, mp, sizeof(mp));
} //边界
inline bool check(int x, int y){
return x >= && x <= n && y >= && y <= m;
} //检查草是否都烧完
bool all_Fired(){
rep(i, , n) rep(j, , m){
if (cp_mp[i][j] == '#' && !vis[i][j]) return false;
} return true;
} void bfs(int x1, int y1, int x2, int y2){ queue<node> que; //标记两个点火源
vis[x1][y1] = true;
vis[x2][y2] = true; //放入队列
node a1(x1, y1, );
node a2(x2, y2, );
que.push(a1);
que.push(a2); int tmp_ans = ;
while (!que.empty()){ node tmp = que.front();
que.pop(); tmp_ans = max(tmp_ans, tmp.c); //这里是得出能烧到的草的最后时间 rep__(p, , ){ int dx = tmp.x + mv_x[p];
int dy = tmp.y + mv_y[p]; //没越界,没被访问过,是草
if (check(dx, dy) && !vis[dx][dy] && cp_mp[dx][dy] == '#'){
vis[dx][dy] = true;
node k(dx, dy, tmp.c + );
que.push(k);
}
}
} //全部烧完才能算一个答案
if (all_Fired()) ans = min(ans, tmp_ans);
} int main(){ ios::sync_with_stdio(false);
cin.tie(); int T;
cin >> T; rep(o, , T){ cin >> n >> m;
input(); ans = inf; // //枚举点火情况
rep__(i, , l ) rep__(j, i, l){
init_vis_And_cp_mp(); //每种情况前,初始化函数
bfs(x[i], y[i], x[j], y[j]); //两个点火源
}
// cout << "Case 1: 1" << endl;
cout << "Case " << o << ": " << (ans == inf ? - : ans) << endl;
} return ;
}

kuangbin专题 专题一 简单搜索 Fire Game FZU - 2150的更多相关文章

  1. (广搜)Fire Game -- FZU -- 2150

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82828#problem/I Fire Game Time Limit:1000MS    ...

  2. kuangbin专题 专题一 简单搜索 Fire! UVA - 11624

    题目链接:https://vjudge.net/problem/UVA-11624 题意:一个迷宫,可能有一个或者多个地方着火了,每过1个时间消耗,火会向四周蔓延,问Joe能不能逃出迷宫,只要走出迷宫 ...

  3. kuangbin专题总结一 简单搜索

    A - 棋盘问题:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有 ...

  4. Fire Game FZU - 2150 (bfs)

    Problem 2150 Fire Game Accept: 3772    Submit: 12868Time Limit: 1000 mSec    Memory Limit : 32768 KB ...

  5. 搜索入门_简单搜索bfs dfs大杂烩

    dfs题大杂烩 棋盘问题  POJ - 1321 和经典的八皇后问题一样.  给你一个棋盘,只有#区域可以放棋子,同时同一行和同一列只能有一个棋子. 问你放k个棋子有多少种方案. 很明显,这是搜索题. ...

  6. [kuangbin带你飞]专题一 简单搜索

            ID Origin Title 454 / 1008 Problem A POJ 1321 棋盘问题   328 / 854 Problem B POJ 2251 Dungeon Ma ...

  7. 简单搜索 kuangbin C D

    C - Catch That Cow POJ - 3278 我心态崩了,现在来回顾很早之前写的简单搜索,好难啊,我怎么写不出来. 我开始把这个写成了dfs,还写搓了... 慢慢来吧. 这个题目很明显是 ...

  8. ElasticSearch 5学习(4)——简单搜索笔记

    空搜索: GET /_search hits: total 总数 hits 前10条数据 hits 数组中的每个结果都包含_index._type和文档的_id字段,被加入到_source字段中这意味 ...

  9. nyoj 284 坦克大战 简单搜索

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...

随机推荐

  1. vs2017 cordova调试android app

    方案是:virtualbox + androidx86 7.0+_x64.iso虚拟机方式

  2. 使用MultiByteToWideChar转换UTF8为GBK(UTF8在Windows的代码页是CP_UTF8)

    两个使用的函数: 1,UTF8转化为Unicode,inline为了编译后更快运行,老用到了,返回字符串为了使用链式表达式 inline WCHAR  *UTF8ToUnicode(const cha ...

  3. c#实现golang 的channel

    使用.NET的 BlockingCollection<T>来包装一个ConcurrentQueue<T>来实现golang的channel. 代码如下: public clas ...

  4. Redis实现关注关系

    最近使用关系型数据库实现了用户之间的关注,于是思考换一种思路,使用Redis实现用户之间的关注关系. 综合考虑了一下Redis的几种数据结构后,觉得可以用集合实现一下. 假设"我" ...

  5. VS2015设置VS2017的“快速操作”快捷键Alt+Enter

    选项 -  环境 - 键盘 - 视图.快速操作和重构 添加“Alt+Enter (文本编辑器)”

  6. 微信小程序把玩(三十七)location API

    原文:微信小程序把玩(三十七)location API location API也就分这里分两种wx.getLocation(object)获取当前位置和wx.openLocation(object) ...

  7. Sysinternals套件2016年11月更新发布,诸多工具被更新

    Sysinternals 实用程序可帮助您管理.解决和诊断 Windows 系统和应用程序,在 Sysinternals 的 2016 年 11 月更新中,微软增强 在 sysmon 对注册表和文件事 ...

  8. QML动画概述(几十篇相关博客)

    QML提供了丰富的动画元素,说起动画,无非是给UI增光添彩罢了.在QML中,动画常常与State和Transition联系在一起,这几个概念(下面的例子中都用到了)都比较简单,相关介绍可查看Qt官方文 ...

  9. SqlServer 动态SQL(存储过程)中Like 传入参数无正确返回值的问题

    最近在做项目时,以动态Sql进行Like语句查询时发现应该返回的结果却一直返回空,后来发现是写法错误: 错误SQL: DECLARE @0 varchar(20) SET @0 = 'XA-LZ' S ...

  10. Java对象结构及HotSpot对象模型

    一.对象结构 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding).下图是普通对象实例与数组对象 ...