kuangbin专题 专题一 简单搜索 Fire Game FZU - 2150
题目链接: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的更多相关文章
- (广搜)Fire Game -- FZU -- 2150
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82828#problem/I Fire Game Time Limit:1000MS ...
- kuangbin专题 专题一 简单搜索 Fire! UVA - 11624
题目链接:https://vjudge.net/problem/UVA-11624 题意:一个迷宫,可能有一个或者多个地方着火了,每过1个时间消耗,火会向四周蔓延,问Joe能不能逃出迷宫,只要走出迷宫 ...
- kuangbin专题总结一 简单搜索
A - 棋盘问题:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有 ...
- Fire Game FZU - 2150 (bfs)
Problem 2150 Fire Game Accept: 3772 Submit: 12868Time Limit: 1000 mSec Memory Limit : 32768 KB ...
- 搜索入门_简单搜索bfs dfs大杂烩
dfs题大杂烩 棋盘问题 POJ - 1321 和经典的八皇后问题一样. 给你一个棋盘,只有#区域可以放棋子,同时同一行和同一列只能有一个棋子. 问你放k个棋子有多少种方案. 很明显,这是搜索题. ...
- [kuangbin带你飞]专题一 简单搜索
ID Origin Title 454 / 1008 Problem A POJ 1321 棋盘问题 328 / 854 Problem B POJ 2251 Dungeon Ma ...
- 简单搜索 kuangbin C D
C - Catch That Cow POJ - 3278 我心态崩了,现在来回顾很早之前写的简单搜索,好难啊,我怎么写不出来. 我开始把这个写成了dfs,还写搓了... 慢慢来吧. 这个题目很明显是 ...
- ElasticSearch 5学习(4)——简单搜索笔记
空搜索: GET /_search hits: total 总数 hits 前10条数据 hits 数组中的每个结果都包含_index._type和文档的_id字段,被加入到_source字段中这意味 ...
- nyoj 284 坦克大战 简单搜索
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...
随机推荐
- 数据绑定(四)使用DataContext作为Binding的Source
原文:数据绑定(四)使用DataContext作为Binding的Source DataContext属性被定义在FrameworkElement类里,这个类是WPF控件的基类,这意味着所有WPF控件 ...
- Delphi中close与Terminate方法的区别
在有多个Form窗体时可以体现出来.用close是只关闭本窗体,而用Application.terminate是关闭整个程序,包括所有窗体.(1)当Close是一个主窗体时,程序会退出.Close会发 ...
- Resources.resx 未将对象引用设置到对象的实例
原文:解决使用DevExpress开发错误:未将对象引用设置到对象的实例 在使用DevExpress是总是会出现一些状况.这次同事在他的机器上调试完毕的代码发过来,却出现“未将对象引用设置到对象的实例 ...
- C# Oracle数据库操作类
using System; using System.Data; using System.Collections.Generic; using System.Configuration; using ...
- 零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下)
原文:零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下) 你可以把Clip想成是一个遮罩,运用遮罩达到我们想要的效果 所以在这里我们把文字 ...
- 一顶博士帽能带来什么——访GOOGLE公司中国区总裁李开复
在读了博士生远潇给本报的来信后,GOOGLE公司中国区总裁李开复说,有这些困惑和担心,实际上是很多博士生们在读博士之前并没有认真地想过,自己是不是能耐得住寂寞做学问,是不是能抵御来自物质世界的诱惑 ...
- QT5 屏幕旋转90度
主要思路是将所有项目界面加载到QGraphicsScene,再进行旋转操作.直接上代码#include <QApplication>#include <QGraphicsView&g ...
- Qt 访问网络的 HttpClient(封装QNetworkAccessManager,且有服务端)
Qt 使用 QNetworkAccessManager 访问网络,这里对其进行了简单的封装,访问网络的代码可以简化为: 1 2 3 HttpClient("http://localhost: ...
- Android无布局文件下自定义通知栏notification的 icon
在开发项目一个与通知栏有关的功能时,由于自己的项目是基于插件形式的所以无法引入系统可用的布局文件,这样无法自定义布局,造成无法自定义通知栏的icon. 在网上也有一种不用布局文件更换icon的方法,但 ...
- csdn token
http://download.csdn.net/download/pp_haitun/9614126 http://dl.download.csdn.net/down11/20160826/28b9 ...