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 Composer 包管理器的安装和使用
一,包管理器的安装 01,首先确定 php 命令能够全局使用,要是不能请修改环境变量 02,使用 curl 命令安装 => curl -sS http://install.phpcomposer ...
- centos7 Apache 2.4.6 多域名多网站配置
Apache 2.4.6 多域名多网站配置 在/etc/httpd/conf 下 编辑 vim httpd.conf 添加:ServerName 外网IP 并注释 #DocumentRoot &quo ...
- sql中case when语句的使用
case when语句有两种格式:简单case函数和搜索case函数. --简单Case函数CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女'ELSE '其他' EN ...
- linux 3.10 一次softlock排查
x86架构.一个同事分析的crash,我在他基础上再次协助分析,也没有获得进展,只是记录一下分析过程.记录是指备忘,万一有人解决过,也好给我们点帮助. 有一次软锁,大多数cpu被锁,log中第一个认为 ...
- E_FAIL (0x80004005) MachineWrap
下载VirtualBox-4.3.12-93733-Win.exe,下载地址:http://download.virtualbox.org/virtualbox/4.3.12/
- Structs复习 Structs标签
如果类型是object Structs会把它默认解析为OGNL表达式 想取字符串的话就 ‘’ ‘ ’ ‘’ jar包 web.xml. <?xml version="1.0" ...
- c++之enum(枚举)可以没有枚举名
转载自https://blog.csdn.net/u013591613/article/details/71215000 C_enum(枚举)可以没有枚举名 如果声明枚举类型时没有指定枚举名,其作用就 ...
- UILabel的一些属性
1.0 lineBreakMode 1.1.0 NSLineBreakByWordWrapping = 0, 以字符为显示单位显示,后面部分省略不显示 NSLineBreakByCharWrapp ...
- 历届试题 对局匹配-(dp)
问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起.如果两人分差 ...
- poj2115-Looooops-(扩展欧几里得定理)
C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions:33752 Accepted: 9832 Descri ...