题目链接:https://vjudge.net/problem/UVA-11624

题意:给一个1000×1000的矩阵,有几个着火点和Joe,着火点和Joe每个单位时间均移动一个单位,求Joe逃出的最短时间。

思路:

  先预处理,对每一个Fire进行一次bfs,更新cnt[i][j],它表示(i,j)的着火时间,注意多个Fire能到达(i,j)时要使cnt[i][j]最小,并且该bfs中的判断语句if(cnt[xx][yy]<=ss) continue能够避免走重复的路径,因此不用标记数组。得到cnt数组后,再对Joe进行一次bfs即可,需要标记数组vis。

AC代码:

#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std; typedef pair<int,int> PII;
const int inf=0x3f3f3f3f;
int go[][]={-,,,,,,,-};
int T,n,m,jx,jy,cnt[][],vis[][];
char mp[][];
vector<PII> vc; struct node{
int x,y,s;
}tmp; void bfs1(int x,int y){
queue<node> que;
cnt[x][y]=;
tmp.x=x,tmp.y=y,tmp.s=;
que.push(tmp);
while(!que.empty()){
node now=que.front();que.pop();
int nx=now.x,ny=now.y,ns=now.s;
for(int i=;i<;++i){
int xx=nx+go[i][],yy=ny+go[i][],ss=ns+;
if(xx<=||xx>n||yy<=||yy>m||mp[xx][yy]=='#') continue;
if(cnt[xx][yy]<=ss) continue;
cnt[xx][yy]=ss;
tmp.x=xx,tmp.y=yy,tmp.s=ss;
que.push(tmp);
}
}
} bool onborder(int x,int y){
return x==||x==n||y==||y==m;
} int bfs2(int x,int y){
queue<node> que;
tmp.x=x,tmp.y=y,tmp.s=;
que.push(tmp);
vis[x][y]=;
while(!que.empty()){
node now=que.front();que.pop();
int nx=now.x,ny=now.y,ns=now.s;
if(onborder(nx,ny)) return ns+;
for(int i=;i<;++i){
int xx=nx+go[i][],yy=ny+go[i][],ss=ns+;
if(xx<=||xx>n||yy<=||yy>m||mp[xx][yy]=='#') continue;
if(vis[xx][yy]) continue;
if(cnt[xx][yy]<=ss) continue;
vis[xx][yy]=;
tmp.x=xx,tmp.y=yy,tmp.s=ss;
que.push(tmp);
}
}
return -;
} int main(){
scanf("%d",&T);
while(T--){
vc.clear();
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
for(int j=;j<=m;++j){
cnt[i][j]=inf;
vis[i][j]=;
scanf(" %c",&mp[i][j]);
if(mp[i][j]=='J') jx=i,jy=j;
if(mp[i][j]=='F') vc.push_back(make_pair(i,j));
}
for(int i=;i<vc.size();++i)
bfs1(vc[i].first,vc[i].second);
int t=bfs2(jx,jy);
if(t==-)
printf("IMPOSSIBLE\n");
else
printf("%d\n",t);
}
return ;
}

uva11624 Fire! (bfs预处理)的更多相关文章

  1. UVA11624 Fire! —— BFS

    题目链接:https://vjudge.net/problem/UVA-11624 题解: 坑点:“portions of the maze havecaught on fire”, 表明了起火点不唯 ...

  2. BZOJ-1189 紧急疏散evacuate BFS预处理+最大流+二分判定+神建模!!

    绝世污题,垃圾题,浪费我一整天青春! 1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1262 ...

  3. uva11624 - Fire!

    uva11624 - Fire! 火在蔓延,人在走.火会蔓延,不会熄灭,我们可以确定某个点着火的时间(广搜).对于J来说,要是他走到某点的时间比火蔓延到该点的时间要短,那么他走到该点的时候,火还没蔓延 ...

  4. HDU - 1430 魔板 (bfs预处理 + 康托)

    对于该题可以直接预处理初始状态[0, 1, 2, 3, 4, 5, 6, 7]所有可以到达的状态,保存到达的路径,直接打印答案即可. 关于此处的状态转换:假设有初始状态为2,3,4,5,0,6,7,1 ...

  5. 【2016 ICPC亚洲区域赛北京站 E】What a Ridiculous Election(BFS预处理)

    Description In country Light Tower, a presidential election is going on. There are two candidates,   ...

  6. HDU 3533 Escape(BFS+预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意:给你一张n* m的地图,人在起点在(0,0)要到达终点(n,m)有k(k<=10 ...

  7. bzoj 1415(概率dp和bfs预处理)

    感觉挺经典的一道题目. 先用 bfs 预处理下一步走到的位置.因为每一步走法都是固定的,所以可以用dp的方法来做. 1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  M ...

  8. Fire! (双bfs+预处理)

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

  9. HDU 1430 魔板(康托展开+BFS+预处理)

    魔板 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

随机推荐

  1. 安裝PHPBB

    1.下載PHPBB https://www.phpbb.com/downloads/ 2下載PHP http://windows.php.net/download/ 很多教程都介紹在WIN7用ISAP ...

  2. js的数组在内存中是如何存储的

    前言:本来想自己总结下,但发现以下文章已经写得很好,就直接放链接了. 英文文章:http://voidcanvas.com/javascript-array-evolution-performance ...

  3. 2018-2019 ACM-ICPC, China Multi-Provincial Collegiate Programming Contest

    目录 Contest Info Solutions A. Maximum Element In A Stack B. Rolling The Polygon C. Caesar Cipherq D. ...

  4. 文件描述符、文件表项、V节点表项的一些总结

    转自  http://blog.csdn.net/gzzheyi/article/details/7739556 表格可以参见APUE 第三版 P61. 文件描述符(进程级别): 1).在每个进程表中 ...

  5. 在Android中使用OpenGL ES进行开发第(一)节:概念先行

    一.前期基础是知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGL ES绘制 ...

  6. SIGCHLD函数

    SIGCHLD的产生条件 子进程终止时 子进程接收到SIGSTOP信号停止时 子进程处在停止态,接受到SIGCONT后唤醒时 借助SIGCHLD信号回收子进程 子进程结束运行,其父进程会收到SIGCH ...

  7. JS对象-不可扩展对象、密封对象、冻结对象

    不可扩展对象 Object.preventExtensions() 仅阻止添加自身的属性.但属性仍然可以添加到对象原型. 可以用 Object.isExtensible(obj) 来判断对象是否可扩展 ...

  8. 7.26T2某不科学的迷你激光炮

    题目描述 身为课代表的她,下课总愿意帮老师发作业.老师的作业好多好多啊,一天 下来,她下课休息时间也无几了…… 要是天花板上有一只激光炮该多好啊!把作业塞到激光炮里面,轰——一排 同学该都拿到作业了吧 ...

  9. MySQL数据分析-(12)表操作补充:字段属性

    大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天我们分享的主题是表操作补充之字段属性,依照惯例第一部分,jacky先跟大家分享本课时的学习逻辑 (一)学习逻辑 我们说创建 ...

  10. 初次接触webpack

    1.学习地址 中文文档 https://www.webpackjs.com/concepts/ webpack-dev-server配置说明 https://www.webpackjs.com/con ...