题目链接: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. 快速了解AMD、CMD、CommonJS、ESM

    1.ES6 Module javascript在ES2015(ES6)中出现了语言层面的模块(module). ES6的模块既可以用于浏览器端,也可以用于服务器端(nodeJS). ES6模块是静态化 ...

  2. 现在有没有一种富文本编辑器能够直接从 word 中复制粘贴公式的?

    tinymce是很优秀的一款富文本编辑器,可以去官网下载.https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用. http ...

  3. socket编程和并发服务器

    socket这个词可以表示很多概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket. 在TCP协议中,建立连接的两个进程 ...

  4. 内存管理4-Autoreleasepool

    自动释放池是OC里面的一种内存回收机制,一般可以将一些临时变量添加到自动释放池中,统一回收释放,当自动释放池销毁时,池里面的所有对象都会调用一次release,也就是计数器会减1,但是自动释放池被销毁 ...

  5. Mysql备份恢复方案解析

    1.全量备份和增量备份 1.1全量备份 就是对现有的数据进行全部备份,之前做的备份均可舍弃,以最新的全备为基点. a.全备所有数据库 Innodb引擎: [root@leader mysql]#mys ...

  6. 2016百度之星资格赛 Problem B(大数+组合数)

    题意:度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列.最多200个1. 比如 ...

  7. docker部署nginx+vue项目

    1.vue项目打包 npm run build 会在项目生成dist文件夹,这个文件夹可以使用nginx或tomcat来发布服务 2.查找nginx基础镜像 可以通过以下网站找到符合自己的基础镜像,我 ...

  8. 走进JavaWeb技术世界1:Web后端与J2EE的由来

    转自:微信公众号 码农翻身 这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求 ...

  9. QThreadPool类和QtConcurrent命名空间

    一.QThreadPool类  QThreadPool管理一组线程.它负责管理和回收单个QThread对象以减少程序中线程创建的开销.每个Qt应用程序都有一个全局的QThreadPool对象,可通过方 ...

  10. StringBuffer中delete与setLength清空字符串效率比较

    问题: StringBuffer中有delete.setLength两个方法可以快速清空字符数组.哪个效率高呢? 结论:从清空字符串角度看,两者效率都很高,比较来看,setLength效率更高. 分析 ...