UVA 11624 Fire! BFS搜索
题意:就是问你能不能在火烧到你之前,走出一个矩形区域,如果有,求出最短的时间
分析:两遍BFS,然后比较边界
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
#include<map>
#include<queue>
#include<stdlib.h>
#include<string>
#include<set>
using namespace std;
typedef long long LL;
const int maxn=;
const int INF=0x3f3f3f3f;
char s[maxn][maxn];
int mp[maxn][maxn];
int v[maxn][maxn];
int n,m;
struct Point
{
int x,y;
Point() {}
Point(int a,int b)
{
x=a,y=b;
}
} o,t;
queue<Point>q,e;
int dx[]= {,,-,};
int dy[]= {-,,,};
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=; i<=n; ++i)
scanf("%s",s[i]+);
for(int i=; i<=n; ++i)
{
for(int j=; j<=m; ++j)
{
mp[i][j]=v[i][j]=-;
if(s[i][j]=='F')q.push(Point(i,j)),mp[i][j]=;
else if(s[i][j]=='J')e.push(Point(i,j)),v[i][j]=;
}
}
while(!q.empty())
{
o=q.front();
q.pop();
for(int i=; i<; ++i)
{
t.x=o.x+dx[i];
t.y=o.y+dy[i];
if(t.x<||t.x>n||t.y<||t.y>m)continue;
if(s[t.x][t.y]=='#'||mp[t.x][t.y]!=-)continue;
mp[t.x][t.y]=mp[o.x][o.y]+;
q.push(t);
}
}
while(!e.empty())
{
o=e.front();
e.pop();
for(int i=; i<; ++i)
{
t.x=o.x+dx[i];
t.y=o.y+dy[i];
if(t.x<||t.x>n||t.y<||t.y>m)continue;
if(s[t.x][t.y]=='#'||v[t.x][t.y]!=-)continue;
v[t.x][t.y]=v[o.x][o.y]+;
e.push(t);
}
}
int ans=INF;
for(int i=;i<=n;++i)
{
if(v[i][]!=-)
{
if(mp[i][]==-||v[i][]<mp[i][])
ans=min(ans,v[i][]);
}
if(v[i][m]!=-)
{
if(mp[i][m]==-||v[i][m]<mp[i][m])
ans=min(ans,v[i][m]);
}
}
for(int i=;i<=m;++i)
{
if(v[][i]!=-)
{
if(mp[][i]==-||v[][i]<mp[][i])
ans=min(ans,v[][i]);
}
if(v[n][i]!=-)
{
if(mp[n][i]==-||v[n][i]<mp[n][i])
ans=min(ans,v[n][i]);
}
}
if(ans==INF)printf("IMPOSSIBLE\n");
else printf("%d\n",ans+);
}
return ;
}
UVA 11624 Fire! BFS搜索的更多相关文章
- UVA - 11624 Fire! bfs 地图与人一步一步先后搜/搜一次打表好了再搜一次
UVA - 11624 题意:joe在一个迷宫里,迷宫的一些部分着火了,火势会向周围四个方向蔓延,joe可以向四个方向移动.火与人的速度都是1格/1秒,问j能否逃出迷宫,若能输出最小时间. 题解:先考 ...
- uva 11624 Fire!(搜索)
开始刷题啦= = 痛并快乐着,学到新东西的感觉其实比看那些无脑的小说.电视剧有意思多了 bfs裸体,关键是先把所有的着火点放入队列,分开一个一个做bfs会超时的 发现vis[][]是多余的,完全可以用 ...
- UVA 11624 Fire! (bfs)
算法指南白书 分别求一次人和火到达各个点的最短时间 #include<cstdio> #include<cstring> #include<queue> #incl ...
- UVA 11624 Fire! bfs 难度:0
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- BFS(两点搜索) UVA 11624 Fire!
题目传送门 /* BFS:首先对火搜索,求出火蔓延到某点的时间,再对J搜索,如果走到的地方火已经烧到了就不入队,直到走出边界. */ /******************************** ...
- UVa 11624 Fire!(着火了!)
UVa 11624 - Fire!(着火了!) Time limit: 1.000 seconds Description - 题目描述 Joe works in a maze. Unfortunat ...
- UVA 11624 Fire!【两点BFS】
Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the owner of the m ...
- E - Fire! UVA - 11624(bfs + 记录火到达某个位置所需要的最小时间)
E - Fire! UVA - 11624 题目描述 乔在迷宫中工作.不幸的是,迷宫的一部分着火了,迷宫的主人没有制定火灾的逃跑计划.请帮助乔逃离迷宫.根据乔在迷宫中的位置以及迷宫的哪个方块着火,你必 ...
- UVA 11624 - Fire! 图BFS
看题传送门 昨天晚上UVA上不去今天晚上才上得去,这是在维护么? 然后去看了JAVA,感觉还不错昂~ 晚上上去UVA后经常连接失败作死啊. 第一次做图的题~ 基本是照着抄的T T 不过搞懂了图的BFS ...
随机推荐
- 硬盘4k对齐教程总结
4k对齐概念: 4K对齐相关联的是一个叫做“高级格式化”的分区技术.首先先来了解一下什么是叫做“4K 对齐”.其实“4K对齐”相关联的是一个叫做“高级格式化”的分区技术.“高级格式化”是国际硬盘设备与 ...
- MongoDB的C#驱动基本使用
转载:http://www.cnblogs.com/wilber2013/p/4175825.html MongoDB的官方C#驱动可以通过 这个链接 得到.链接提供了.msi和.zip两种方式获取驱 ...
- bootstrap-treeview
简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一 ...
- hdu 1561
有依赖的背包,用树形dp解 #include<iostream> #include<cstdio> #include<cstring> #include<al ...
- 国外程序员整理的 C++ 资源大全
摘要:C++是在C语言的基础上开发的一种集面向对象编程.泛型编程和过程化编程于一体的编程语言.应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言. 关于 C++ 框架.库和资源的一 ...
- POJ 1562 && ZOJ 1709 Oil Deposits(简单DFS)
题目链接 题意 : 问一个m×n的矩形中,有多少个pocket,如果两块油田相连(上下左右或者对角连着也算),就算一个pocket . 思路 : 写好8个方向搜就可以了,每次找的时候可以先把那个点直接 ...
- 并发下常见的加锁及锁的PHP具体实现
http://www.cnblogs.com/scotoma/archive/2010/09/26/1836312.html Apache + PHP 的并发访问 http://www.cnblogs ...
- php Laravel windows安装
先要装一个composer, 如果不会装请看这里composer windows可以直接下载composer-setup.exe, 如果安装失败提示"Unable to connect to ...
- ORA-12704 字符集不匹配
- win8 hyper-v 禁用不必卸载虚拟机
转载:http://tylzwp.blogbus.com/logs/232938121.html 禁用hyperv的目的是使用之前在用的VMware的虚拟机,不必重新处理一遍. 具体操作: 1确报之前 ...