先对火BFS一次,求出每个点的最小着火时间。

再对人BFS一次,求出走到边界的最少时间。

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int n,m,bz[1005][1005],qihuo[1005][1005];
char map[1005][1005];
int h[4][2]={-1,0,1,0,0,-1,0,1};
struct point
{
int x,y,step;
};
queue<point> q;
void bfs_huo()
{
int i,j,x,y;
point t,tt;
while(!q.empty())
{
t=q.front(); q.pop();
for(i=0;i<4;i++)
{
x=t.x+h[i][0]; y=t.y+h[i][1];
if(x>=0&&x<n&&y>=0&&y<m&&(map[x][y]=='.'||map[x][y]=='J')&&!bz[x][y])
{
bz[x][y]=1;
tt.x=x; tt.y=y; tt.step=t.step+1; qihuo[x][y]=tt.step;
q.push(tt);
}
}
}
}
int bfs_men(point s)
{
int i,j,x,y;
point t,tt;
while(!q.empty()) q.pop();
q.push(s); bz[s.x][s.y]=1;
while(!q.empty())
{
t=q.front(); q.pop();
if(t.x<=0||t.x==n-1||t.y<=0||t.y==m-1) return t.step; //??磬?0
for(i=0;i<4;i++)
{
x=t.x+h[i][0]; y=t.y+h[i][1];
if(x>=0&&x<n&&y>=0&&y<m&&(map[x][y]=='.'||map[x][y]=='J')&&!bz[x][y])
{
if(qihuo[x][y]<=t.step+1) continue;
bz[x][y]=1;
tt.x=x; tt.y=y; tt.step=t.step+1;
q.push(tt);
}
}
}
return -1;
}
int main(int argc, char *argv[])
{
int nn,i,j;
point s,t;
cin>>nn;
while(nn--)
{
cin>>n>>m;
while(!q.empty()) q.pop();
memset(bz,0,sizeof(bz));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cin>>map[i][j]; qihuo[i][j]=1000000000; //???
if(map[i][j]=='J') {s.x=i; s.y=j; s.step=0;}
if(map[i][j]=='F') {t.x=i; t.y=j; t.step=0; q.push(t); bz[i][j]=1; qihuo[i][j]=0;}
}
bfs_huo();
memset(bz,0,sizeof(bz));
int ans=bfs_men(s);
if(ans>=0) cout<<ans+1<<endl;
else cout<<"IMPOSSIBLE"<<endl;
}
return 0;
}

UVA 11624 Fire!(二次BFS)的更多相关文章

  1. BFS(两点搜索) UVA 11624 Fire!

    题目传送门 /* BFS:首先对火搜索,求出火蔓延到某点的时间,再对J搜索,如果走到的地方火已经烧到了就不入队,直到走出边界. */ /******************************** ...

  2. UVa 11624 Fire!(着火了!)

    UVa 11624 - Fire!(着火了!) Time limit: 1.000 seconds Description - 题目描述 Joe works in a maze. Unfortunat ...

  3. UVA - 11624 Fire! bfs 地图与人一步一步先后搜/搜一次打表好了再搜一次

    UVA - 11624 题意:joe在一个迷宫里,迷宫的一些部分着火了,火势会向周围四个方向蔓延,joe可以向四个方向移动.火与人的速度都是1格/1秒,问j能否逃出迷宫,若能输出最小时间. 题解:先考 ...

  4. UVA - 11624 Fire! 【BFS】

    题意 有一个人 有一些火 人 在每一秒 可以向 上下左右的空地走 火每秒 也会向 上下左右的空地 蔓延 求 人能不能跑出来 如果能 求最小时间 思路 有一个 坑点 火是 可能有 多处 的 样例中 只有 ...

  5. UVA 11624 - Fire! 图BFS

    看题传送门 昨天晚上UVA上不去今天晚上才上得去,这是在维护么? 然后去看了JAVA,感觉还不错昂~ 晚上上去UVA后经常连接失败作死啊. 第一次做图的题~ 基本是照着抄的T T 不过搞懂了图的BFS ...

  6. UVa 11624 Fire!(BFS)

    Fire! Time Limit: 5000MS   Memory Limit: 262144KB   64bit IO Format: %lld & %llu Description Joe ...

  7. UVA 11624 Fire! (bfs)

    算法指南白书 分别求一次人和火到达各个点的最短时间 #include<cstdio> #include<cstring> #include<queue> #incl ...

  8. (简单) UVA 11624 Fire! ,BFS。

    Description Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the ow ...

  9. UVA 11624 Fire! bfs 难度:0

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

随机推荐

  1. 今天给大家分享一下Android中的资源与国际化的问题

    摘要:该文章将向大家分享Android中的资源与国际化的问题. 今天给大家分享一下Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layo ...

  2. 删除mysql重复记录的办法

    网上有很多的办法,但是大多数都是通过临时表的办法,其实你是可以用一句简单的sql就可以做到: alter ignore table SOMETABLE add primary key(fields n ...

  3. ASP.NET MVC学习系列 WebAPI初探

    转自http://www.cnblogs.com/babycool/p/3922738.html 一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax( ...

  4. Android工程师必会做的20道题

    一.单选题     (共7道题,每题5分) 1.使用AIDL完成远程service方法调用下列说法不正确的是 A.aidl对应的接口名称不能与aidl文件名相同 B.aidl的文件的内容类似java代 ...

  5. C#获取数组的行和列数程序代码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  6. CSS 链接

    不同的链接可以有不同的样式. 链接样式 链接的样式,可以用任何CSS属性(如颜色,字体,背景等). 特别的链接,可以有不同的样式,这取决于他们是什么状态. 这四个链接状态是: a:link - 正常, ...

  7. cocos2dx系列笔记(1)- windows环境配置前篇

    cocos2dx升级之旅,请多指教~ 本篇是本人搭建cocos2dx-Windows 64位环境的配置说明,仅供参考. 开发准备 搭建环境肯定需要准备好所有工具,只有把工具都准备好了,才能撸起袖子干活 ...

  8. angular 基础练习

    <!DOCTYPE HTML> <html> <head> <title> 测试页 </title> <meta charset=&q ...

  9. jQuery分析(2) - $工厂函数分析

    前言 从这节进入jQuery的世界,首先从jQuery的入口函数开始了解jQuery()或$是如何运作的,这里我给出了一个最小的例子来分析. 回忆 在进入分析代码前我们回想下jQuery的使用方法有哪 ...

  10. Javascript中bind()方法的使用与实现

    对于bind,我愣了下,这个方法常用在jquery中,用于为被选元素添加一个或多个事件处理程序. 查了下手册,发现bind的作用和apply,call类似都是改变函数的execute context, ...