博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 11624,两次BFS
阅读量:6941 次
发布时间:2019-06-27

本文共 1178 字,大约阅读时间需要 3 分钟。

题目链接:

题目链接:

《训练指南》P307

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

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

#include 
using namespace std;const int INF = 0x3f3f3f3f;const int maxr = 1000+5;const int maxc = 1000+5;int R,C;char maze[maxr][maxc];struct Cell{ int r,c; Cell (int r,int c) : r(r),c(c) {}};const int dr[] = {-1,1,0,0};const int dc[] = {
0,0,-1,1};int d[maxr][maxc][2] ,vis[maxr][maxc][2];queue
Q;void bfs(int kind){ while(!Q.empty()) { Cell cell = Q.front(); Q.pop(); int r = cell.r, c = cell.c; for(int dir = 0; dir < 4; dir++) { int nr = r + dr[dir], nc = c + dc[dir]; if(nr >= 0 && nr < R && nc >= 0 && nc < C && maze[nr][nc] == '.' && !vis[nr][nc][kind]) { Q.push(Cell(nr, nc)); vis[nr][nc][kind] = 1; d[nr][nc][kind] = d[r][c][kind] + 1; } } }}int ans;void check(int r,int c){ if(maze[r][c]!='.'||!vis[r][c][0]) return; ///走不到 if(!vis[r][c][1]||d[r][c][0]
fires; for(int i=0;i

 

转载于:https://www.cnblogs.com/TreeDream/p/5874391.html

你可能感兴趣的文章
macOS Sierra 10.12+ 软件提示已损坏,移除到废纸篓的解决方法
查看>>
Istio 庖丁解牛一:组件概览
查看>>
从0带您打造企业级 Vue 服务器渲染 Nuxt.js (一) 入门
查看>>
vue watch数组引发的血案
查看>>
LAMP和LNMP深度优化
查看>>
(三)Python的List和Tuple类型
查看>>
近期面试题整理
查看>>
1.编辑器 - Visual Studio Code
查看>>
MDKAutoLayoutHeight 自动化UITableviewCell高度计算工具
查看>>
JS 事件机制 Event Loop
查看>>
简历上的项目经历怎么写 ?这 3 条原则不可忽视 !
查看>>
Python:鲜为人知的功能特性(下)
查看>>
正则表达式
查看>>
基于python flask编写测试平台系列之·(1)当前项目展示
查看>>
[译] 玩转 JavaScript 面试:何为 Promise ?
查看>>
java B2B2C Springcloud电子商务平台源码 -Feign之源码解析
查看>>
jQuery源码解析之addClass(),removeClass(),toggleClass()和hasClass()
查看>>
正则的回溯引用
查看>>
The Next Step for Machine Learning 机器学习落地需攻破的9个难题
查看>>
js捕获错误信息
查看>>