在一个矩形方阵里面,一个人要从一个位置走向另一个位置,其中某些地方有火源,每过一分钟,火源就会点燃相邻的点,同时相邻的点也变成了火源。人不能通过有火的点。问一个人能够安全地走到目的地去?最短时间多少?

氺题不多说,直接预处理每个点的起火时间,然后bfs即可。

召唤代码君:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#define maxn 1010
using namespace std;char s[maxn][maxn];
int g[maxn][maxn];
int T,n,m;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};bool inside(int cx,int cy)
{return cx>0 && cx<=n && cy>0 && cy<=m;
}bool border(int cx,int cy)
{return cx==1 || cx==n || cy==1 || cy==m;
}void init_fire()
{for (int i=1; i<=n; i++)for (int j=1; j<=m; j++) g[i][j]=99999999;queue<int> qx,qy;for (int i=1; i<=n; i++)for (int j=1; j<=m; j++)if (s[i][j]=='F') qx.push(i),qy.push(j),g[i][j]=0;while (!qx.empty()){int cx=qx.front(),cy=qy.front();qx.pop(),qy.pop();for (int i=0; i<4; i++){if (!inside(cx+dx[i],cy+dy[i])) continue;if (s[cx+dx[i]][cy+dy[i]]!='.') continue;if (g[cx][cy]+1>=g[cx+dx[i]][cy+dy[i]]) continue;g[cx+dx[i]][cy+dy[i]]=g[cx][cy]+1;qx.push(cx+dx[i]),qy.push(cy+dy[i]);}}
}int bfs()
{queue<int> qx,qy;for (int i=1; i<=n; i++)for (int j=1; j<=m; j++)if (s[i][j]=='J'){g[i][j]=0;qx.push(i),qy.push(j);if (border(i,j)) return 1;}while (!qx.empty()){int cx=qx.front(),cy=qy.front();qx.pop(),qy.pop();for (int i=0; i<4; i++){if (s[cx+dx[i]][cy+dy[i]]!='.') continue;if (g[cx][cy]+1>=g[cx+dx[i]][cy+dy[i]]) continue;if (border(cx+dx[i],cy+dy[i])) return g[cx][cy]+2;g[cx+dx[i]][cy+dy[i]]=g[cx][cy]+1;qx.push(cx+dx[i]),qy.push(cy+dy[i]);}}return -1;
}int main()
{scanf("%d",&T);while (T--){scanf("%d%d",&n,&m);for (int i=1; i<=n; i++) scanf("%s",s[i]+1);init_fire();int ans=bfs();if (ans==-1) puts("IMPOSSIBLE");else printf("%d\n",ans);}return 0;
}

  

转载于:https://www.cnblogs.com/lochan/p/3842425.html

UVA11624_Fire!相关推荐

最新文章

  1. 【Python学习系列二十五】数据结构-有向图绘制
  2. php5ts.dll 注册码,修复php5ts.dll
  3. java小程序连接数据库_Java程序连接各种数据库的方法
  4. Python中__str__和__repr__
  5. Linux Kernel中的同步机制的介绍
  6. php 获取实例的类名,PHP类名获取方式及单例模式实现
  7. iostat命令详解_对iostat输出结果的理解
  8. java国际化服务器不识别_国际化踩坑记录java.util.MissingResourceException:
  9. 全球首台商用量子计算机发布!体积如同大象,算力不及笔记本
  10. 白板推导系列Pytorch-支持向量机(SVM)
  11. Android复习之冒泡排序
  12. gstreamer/deepstream方面的博文,全网首发且唯一,有图为证
  13. node.js环境搭建超详细图文教程
  14. 带无线驱动的linux版本,CentOS 5.6 上安装支持802.11b/g无线网卡驱动具体过程
  15. 极品飞车14! u9gt2完美全屏运行
  16. 记一次大量499http状态码问题出现与处理
  17. 推荐两个软件下载网站:多特和绿盟
  18. 报错:RuntimeError: view size is not compatible with input tensor‘s size and stride (at least one dimen
  19. app打包上传遇到的问题
  20. 6 个设计准则让图表焕然一新,数据可视化并不难!

热门文章

  1. new与malloc的区别以及实现方法
  2. string学习笔记1
  3. 排队问题解题思路_1120各数的认识解决问题
  4. linux剪贴板复制文件原理,linux剪贴板原理
  5. Oracle PL/SQL语言初级教程
  6. Linux操作系统下三种配置环境变量的方法(linux下几种profile执行顺序)
  7. Liferay门户与CAS实现SSO单点登录
  8. 调用非.net系统的Webservice的探索 ( 三 ) -WCF
  9. Django之ORM操作
  10. linux swap交换分区说明/管理