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

氺题不多说,直接预处理每个点的起火时间,然后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;
}

  

UVA11624_Fire!的更多相关文章

随机推荐

  1. h5小球走迷宫小游戏源码

    无意中找到的一个挺有意思的小游戏,关键是用h5写的,下面就分享给大家源码 还是先来看小游戏的截图 可以用键盘的三个键去控制它,然后通关 下面是源代码 <!doctype html> < ...

  2. iptables 生产环境下基础设置

    iptables 生产环境下基础设置 生成环境需求:防火墙需要让内网的Ip全部通过,外网IP添加到白名单,其他一切拒绝.安装在linux系统中安装yum install iptables-servic ...

  3. 如何fork比特币的源码并同步更新到本地

    一.首先在Github上fork比特币源码,就会在自己的项目库里创建一份比特币代码的拷贝.   打开https://github.com/bitcoin/bitcoin,点击右上角的“Fok”图标,稍 ...

  4. Netty源码分析第5章(ByteBuf)---->第7节: page级别的内存分配

    Netty源码分析第五章: ByteBuf 第六节: page级别的内存分配 前面小节我们剖析过命中缓存的内存分配逻辑, 前提是如果缓存中有数据, 那么缓存中没有数据, netty是如何开辟一块内存进 ...

  5. SQL中读取Excel 以及 bpc语言

    --开启导入功能 reconfigure reconfigure --允许在进程中使用ACE.OLEDB.12 --允许动态参数 EXEC master.dbo.sp_MSset_oledb_prop ...

  6. 记一次centos6升级salt-minion启动失败的问题

    记一次centos6升级salt-minion启动失败的问题 作者:耀耀 blog:https://www.liuyao.me 一.起因 升级Salt-minion后 使用/etc/init.d/sa ...

  7. Python20 - Day08

    异常处理 一.什么是异常? 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理他,则会抛出该异常,程序的运行也会停止) 错误分成两种: 1.语法错误 2.逻辑错误 二 ...

  8. Ubuntu下开启mysql远程访问

    1. 开启数据库3306端口 首先,使用如下指令查看3306端口是否对外开放. netstat -an | grep 3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LIS ...

  9. 《Spring1之 第一次站立会议(重发)》

    < 第一次站立会议(重发)> 昨天,我对我们团队要做的项目进行了相关资料的查找,我找到了服务器和客户端的相关代码以及找到了把它们通信所使用TCP/IP等协议: 今天,我把找到的代码和协议资 ...

  10. Maven教程--02设置Maven本地仓库|查看Maven中央仓库

    一:设置Maven本地仓库 Maven默认仓库的路径:~\.m2\repository,~表示我的个人文档:例如:C:\Users\Edward\.m2\repository:如下图: Maven的配 ...