题目链接:http://vjudge.net/contest/132239#problem/A

题目链接:https://uva.onlinejudge.org/external/116/11624.pdf

《训练指南》P307

分析:只需要预处理每个格子起火的时间,在BFS扩展节点的时候加一个判断,到达该节点的时候,格子没有起火。

写法很巧妙,两次BFS类似,数据加一维kind,表示Joe到达该点和火到达该点。

#include <bits/stdc++.h>

using namespace std;

const int INF = 0x3f3f3f3f;
const int maxr = +;
const int maxc = +; int R,C;
char maze[maxr][maxc];
struct Cell{
int r,c;
Cell (int r,int c) : r(r),c(c) {}
};
const int dr[] = {-,,,};
const int dc[] = {,,-,};
int d[maxr][maxc][] ,vis[maxr][maxc][]; queue<Cell> Q;
void bfs(int kind)
{
while(!Q.empty())
{
Cell cell = Q.front();
Q.pop();
int r = cell.r, c = cell.c;
for(int dir = ; dir < ; dir++)
{
int nr = r + dr[dir], nc = c + dc[dir];
if(nr >= && nr < R && nc >= && nc < C && maze[nr][nc] == '.' && !vis[nr][nc][kind])
{
Q.push(Cell(nr, nc));
vis[nr][nc][kind] = ;
d[nr][nc][kind] = d[r][c][kind] + ;
}
}
}
} int ans;
void check(int r,int c)
{
if(maze[r][c]!='.'||!vis[r][c][]) return; ///走不到
if(!vis[r][c][]||d[r][c][]<d[r][c][]) ans= min(ans,d[r][c][]+); ///该点火到达不了,或者joe先于火
} int main()
{
//freopen("input.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&R,&C);
int jr,jc;
vector<Cell> fires;
for(int i=;i<R;i++)
{
scanf("%s",maze[i]);
for(int j=;j<C;j++)
{
if(maze[i][j]=='J')
{
jr = i;
jc = j;
maze[i][j] = '.';
}
else if(maze[i][j]=='F')
{
fires.push_back(Cell(i,j));
maze[i][j] = '.';
}
}
}
memset(vis,,sizeof(vis)); ///各个点到joe的距离
///Joe
vis[jr][jc][] = ;
d[jr][jc][] = ;
Q.push(Cell(jr,jc));
bfs(); for(int i = ;i<fires.size();i++)
{
vis[fires[i].r][fires[i].c][] = ;
d[fires[i].r][fires[i].c][] = ;
Q.push(fires[i]);
}
bfs(); ans = INF;
for(int i=;i<R;i++)
{
check(i,);
check(i,C-);
}
for(int i=;i<C;i++)
{
check(,i);
check(R-,i);
}
if(ans==INF) printf("IMPOSSIBLE\n");
else printf("%d\n",ans);
}
return ;
}

UVa 11624,两次BFS的更多相关文章

  1. UVA 11624 UVA 10047 两道用 BFS进行最短路搜索的题

    很少用bfs进行最短路搜索,实际BFS有时候挺方便得,省去了建图以及复杂度也降低了O(N*M): UVA 11624 写的比较挫 #include <iostream> #include ...

  2. UVa 11624 Fire!(BFS)

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

  3. UVA - 11624 Fire! 双向BFS追击问题

    Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the owner of ...

  4. UVA 11624 - Fire! 图BFS

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

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

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

  6. UVA - 11624 Fire! 【BFS】

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

  7. uva 11624 Fire! 【 BFS 】

    按白书上说的,先用一次bfs,求出每个点起火的时间 再bfs一次求出是否能够走出迷宫 #include<cstdio> #include<cstring> #include&l ...

  8. UVA 11624 Fire!(两次BFS+记录最小着火时间)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  9. Fire! UVA - 11624 (两步bfs)

    题目链接 题意 人要从迷宫走出去,火会向四个方向同时扩散 分析 两步bfs,先出火到达各地时的时间(设初始时间为0,人每走一步为1s,在着一步内火可以向四周可触及的方向同时扩散),然后在bfs人,人能 ...

随机推荐

  1. Swift游戏实战-跑酷熊猫 06 创建平台类以及平台工厂类

    这节内容我们一起学习下随机长度的踩踏平台的原理是怎么样的. 要点: 平台类 我们的平台类继承于SKNode,这样就能被添加进其它节点进而显示在场景中. 它有一个方法来创建平台,这个方法接收一个包含SK ...

  2. Lintcode: Sort Colors II

    Given an array of n objects with k different colors (numbered from 1 to k), sort them so that object ...

  3. JAVA多线程与多进程

    并发与并行是两个既相似而又不相同的概念,但往往容易混为一谈,这两者究竟有什么区别呢?本文通过一个例子让你更好地理解(本文由并发编程网翻译). 现代社会是并行的:多核.网络.云计算.用户负载,并发技术对 ...

  4. JQuery获取和设置Select选项常用方法总结

    1.获取select 选中的 text: $("#cusChildTypeId").find("option:selected").text(); $(&quo ...

  5. 12.了解或熟悉 C, C++, .NET

    挂起,暂不了解,不过C++略懂,.net虽不懂但是做过实际项目,有能力担当

  6. 夺命雷公狗jquery---6属性选择器

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Deep Learning 深度学习 学习教程网站集锦

    http://blog.sciencenet.cn/blog-517721-852551.html 学习笔记:深度学习是机器学习的突破 2006-2007年,加拿大多伦多大学教授.机器学习领域的泰斗G ...

  8. [Ubuntu] 转载-使用Ubuntu修复grub

    原文地址:http://fav.coketea.com/article_show.php?id=1 步骤一.以试用方式进入ubuntu光盘系统,打开终端(快捷键ctrl+alt+t): 步骤二.获取r ...

  9. 一篇文章一张思维导图看懂Android学习最佳路线

    一篇文章一张思维导图看懂Android学习最佳路线 先上一张android开发知识点学习路线图思维导图 Android学习路线从4个阶段来对Android的学习过程做一个全面的分析:Android初级 ...

  10. linux 下安装gsl

    访问 http://ftp.club.cc.cmu.edu/pub/gnu/gsl/下载最新版本的,现在最新的是gsl-1.16.tar.gz,已经是2013年更新的了.然后下载 安装 简便的安装过程 ...