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 ...
随机推荐
- EasyExcel 解析excel
参考:https://blog.csdn.net/jiangjiandecsd/article/details/81115622 https://blog.csdn.net/jianggujin/ar ...
- MySQL 中 mysqld_safe 与 mysqld 区别,以及 mysqld_safe 的使用介绍
[mysqld_safe 与 mysqld 区别] 直接运行mysqld程序来启动MySQL服务的方法很少见 mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启 ...
- react-native-picker 实现省市区 时间日期组件
github示例以及详细参数:https://github.com/beefe/react-native-picker 先 安装 link npm install react-native-picke ...
- PowerDesigner 把Comment写到name中 和把name写到Comment中 pd7以后版本可用
在使用PowerDesigner对数据库进行概念模型和物理模型设计时,一般在NAME或Comment中写中文,在Code中写英文.Name用来显 示,Code在代码中使用,但Comment中的文字会保 ...
- cp命令 复制目录
格式:cp -R {源目录地址} {目标目录地址} 假设文件夹download下有两个目录 download/a download/b 现在想将文件夹a复制到文件夹b下,执行 cp -R downlo ...
- linux shell 杂
1. 字符串截取 var=http://www.baidu.com/index.html echo ${var} var=http://www.baidu.com/index.html /*从左到右第 ...
- es6 初级之箭头函数
1.先看一个例子: <script> function show() { console.log('aluoha'); } show(); </script> 2. 改写成简单 ...
- UnityHub破解
1.退出UnityHub,安装好nodejs执行以下命令 npm install -g asar 2.打开UnityHub安装目录如 C:\Program Files\Unity Hub\resour ...
- jenkins+docker+docker-compose完整发版流程
首先搭建jenkins+maven+nexus这一套自动化打包工具,并配置好相应配置,这里就不再赘述了. 其次,搭建好docker集群和私有仓库,以及安装好docker-compose工具,配置好相应 ...
- ReultSet有什么作用和使用
结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等. int col ...