FZU2150 :Fire Game (双起点BFS)
传送门:点我
题意:“#”是草,"."是墙,询问能不能点燃俩地方,即点燃俩“#”,把所有的草烧完,如果可以,那么输出最小需要的时间,如果不行输出-1
思路:暴力BFS,看到n和m都不大,直接把每个“#”都存下来,每次加入2个点进广搜搜能否烧完,然后更新ans即可。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <utility>
#include <bitset>
using namespace std;
#define LL long long
#define pb push_back
#define mk make_pair
#define pill pair<int, int>
#define mst(a, b) memset(a, b, sizeof a)
#define REP(i, x, n) for(int i = x; i <= n; ++i)
void closeio(){
cin.tie();
ios::sync_with_stdio();
}
struct note{
int x,y,step;
}p,pos;
char ma[][];
int vis[][];
int n,m;
int go[][] = {{,},{-,},{,-},{,}};//四个方向
void init(){
memset(vis,,sizeof(vis));
}
bool check(int x,int y){
if(x < || x >= n || y < || y >= m || vis[x][y] == ){
return false;
}
return true;
}//判断是否越界和已经访问过
bool judge(){
for(int i = ; i < n ; i ++){
for(int j = ; j < m ; j ++){
if(ma[i][j] == '#' && !vis[i][j]){
return false;
}
}
}
return true;
}//判断是否满足全都着火了
int bfs(int x,int y,int a,int b){
int sum = ;
queue<note>q;
q.push((note){x,y,});
vis[x][y] = ;
q.push((note){a,b,});
vis[a][b] = ;
//把两个点都加入队列
while(!q.empty()){
pos = q.front();
sum = pos.step;//队列中最后一个点的step就是需要的步数
q.pop();
for(int i = ; i < ;i ++){
int dx = pos.x + go[i][];
int dy = pos.y + go[i][];
if(check(dx,dy) && ma[dx][dy] == '#'){
p.x = dx;
p.y = dy;
p.step = pos.step + ;
q.push(p);
vis[dx][dy] = ;
}
}
}
return sum;
}
int main()
{
int t,cas = ;
for(scanf("%d",&t);t--;){
vector<note>v;
scanf("%d %d",&n,&m);
for(int i = ; i < n ; i++){
scanf("%s",ma[i]);
for(int j = ; j < m ; j ++){
if(ma[i][j] == '#'){
p.x = i;p.y = j;p.step = ;
v.push_back(p);
}
}
}
int ans = ;
for(int i = ; i < v.size() ; i++){
for(int j = i ; j < v.size() ; j ++){
init();
int a = bfs(v[i].x,v[i].y,v[j].x,v[j].y);
if(judge()){
ans = min(a,ans);
}//如果都着火了,那么ans值取ans和这次广搜中小的那个
}
}
printf("Case %d: %d\n",cas++,ans == ?-:ans);
}
return ;
}
FZU2150 :Fire Game (双起点BFS)的更多相关文章
- FZU 2150 Fire Game(双起点)【BFS】
<题目链接> 题目大意: 两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地方时间为0,蔓延至下一格的时间依次加一 ...
- HDU - 2612 Find a way 双起点bfs(路径可重叠:两个队列分别跑)
Find a way Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- UVA 11624 Fire!【两点BFS】
Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the owner of the m ...
- FZU2150 Fire Game
题目: 两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地方时间为0,蔓延至下一格的时间依次加一.求烧完所有的草需要的最少时间 ...
- FZU - 2150 Fire Game bfs+双起点枚举
题意,10*10的地图,有若干块草地“#”,草地可以点燃,并在一秒后点燃相邻的草地.有墙壁‘·‘阻挡.初始可以从任意两点点火.问烧完最短的时间.若烧不完输出-1. 题解:由于100的数据量,直接暴力. ...
- FZU2150 Fire Game —— BFS
题目链接:https://vjudge.net/problem/FZU-2150 Problem 2150 Fire Game Accept: 2702 Submit: 9240 Time Li ...
- FZU2150 Fire Game BFS搜索
题意:就是选两个点出发,只能走草坪,看能不能走完所有的草坪 分析:由于数据范围很小,所有枚举这两个点,事先将所有的草坪点存起来,然后任选两个点走,(两个点可以是同一个点) 然后BFS就行了 注:无解的 ...
- Fire! (双bfs+预处理)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- CSU - 2031 Barareh on Fire (两层bfs)
传送门: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2031 Description The Barareh village is on f ...
随机推荐
- php实现单点登录,顶级域名与子域名间共享Cookie实现单点登录原理
这是一个简单版的php单点登录概述,如果需要实现复杂的需自己,编写复杂的ticket加解密算法. 先看张图. sso系统,http://sso.yxh.com 1 2 3 4 5 <?php ...
- 机器学习进阶-光流估计 1.cv2.goodFeaturesToTrack(找出光流估计所需要的角点) 2.cv2.calcOpticalFlowPyrLK(获得光流检测后的角点位置) 3.cv2.add(进行像素点的加和)
1.cv2.goodFeaturesToTrack(old_gray, mask=None, **feature_params) 用于获得光流估计所需要的角点参数说明:old_gray表示输入图片, ...
- 原生java读取存储为xml格式的数据,并存储到java bean里
一.举例读取的文件为:X-bond可交易债券信息_20180917.xml <?xml version="1.0" encoding="UTF-8"?&g ...
- OS位数,基本概念,结合iOS
CPU位数,一般指CPU支持的指令集位数,32位CPU对应32位的指令集,64位的CPU对应64位的指令集,不过为了向下兼容,64位CPU也支持32位的指令集. 操作系统位数,一般指操作系统对应的指令 ...
- HashSet和LinkedHashSet解析
一.简介 1.Set概念 Set可以理解为集合,非常类似数据概念中的集合,集合三大特征:1.确定性:2.互异性:3.无序性,因此Set实现类也有类似的特征. 2.HashSet HashSet继承自A ...
- 尚硅谷springboot学习11-占位符
1.随机数 2.占位符获取之前配置的值,如果没有可以使用:指定默认值
- 一次UNITY闪退问题的定位心得
最近项目测试发现,运行unity后不退出运行模式,玩了一局后点击 “再来一局”,反复十几局后unity崩掉. 经观察,发现在这十几局的过程中,unity占用内存不断上升,由3.2G左右上升到3.6G左 ...
- [Nginx]Nginx的基本配置与优化1(完整配置示例与虚拟主机配置)
---------------------------------------------------------------------------------------- 完整配置示例: [ n ...
- [Linux]Linux下动态安装PHP扩展的一般方法(图)
---------------------------------------------------------------------------------------------------- ...
- 关于xml中自动提示功能的设置
我们在编写xml文件时如果有自动提示功能,将会事半功倍,下面我就怎么设置xml进行说明: 在xml文件的开始几行一般有编写xml文件的语法要求;如 <!DOCTYPE hibernate-con ...