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

氺题不多说,直接预处理每个点的起火时间,然后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. リアルタイム3Dニャンニャン 汉化补丁
  2. sqlserver 指数_大盘指数大涨,牛市是否提前来了?
  3. imp-00017 oracle2298,急,imp怪異問題,請高手協助
  4. 敏捷开发产品管理系列之三:产品用户群规划
  5. bzoj 2437: [Noi2011]兔兔与蛋蛋
  6. 【AHOI2009】【BZOJ1798】Seq 维护序列seq(线段树模板,易错提醒)
  7. qregularexpression和qregexp的区别
  8. 关于用C#调用C++的dll中的函数,获取字符串返回值的一些细节
  9. M1芯片CAD如何安装?M1 mac怎么安装AutoCAD?
  10. stream流转toMap的使用以及Key重复的解决
  11. java hl7_java-发送HL7消息后何时关闭并重新打开套接...
  12. Android 各版本对应的SDK版本
  13. 第1195期机器学习日报(2017-12-26)
  14. JS之 获取日期方法
  15. 女生应该找一个会打DOTA的男生做老公
  16. MarkdownPad 2 安装配置及常见问题
  17. 七:Shell脚本:正则表达式与文本处理器三剑客grep,egrep, sed,awk
  18. Kibana 7.13.2 启动时报错 TaskManager is unable to start as there the Kibana UUID is invalid
  19. 苹果11怎样设置自动锁屏 iPhone11自动锁屏操作方法
  20. shell易错点整理

热门文章

  1. Pixhawk的传感器数据(陀螺、加计等)流程
  2. 8086汇编 贪吃蛇 源代码
  3. CF B. Working out
  4. 记录 之 cat 和 awk gsub 的使用
  5. 动态分配的const对象
  6. 大于2的质数判断以及范围质数查找
  7. bootstrap form表单提交_[Selenium]28. 处理表单元素
  8. NDK建立多个共享库
  9. Eclipse更改默认字符集 设置UTF-8
  10. Struts2之一个Action包含多个控制处理逻辑