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

氺题不多说,直接预处理每个点的起火时间,然后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. ipa包兼容性大作战!WeTest iOS深度兼容测试全新升级

    2018年,移动端适配话题热闹无比,有iOS新版本新机型发布,全面屏.异形屏.曲面屏争相斗艳,从而产生了各类特殊的屏幕分辨率设备. 正是因为这些特殊分辨率,导致2018年手机设备频繁出现适配问题,如屏 ...

  2. xaf.domain object new 在属性上的用法

    有如下业务对象定义: using System; using System.Linq; using System.Text; using DevExpress.Xpo; using DevExpres ...

  3. Win7搭建FTP服务器

    “控制面板” -> “程序和功能” -> “打开或关闭Windows 功能”: 1.展开“Internet 信息服务” 2.勾选“Internet Information Services ...

  4. angularjs中audio/video 路径赋值问题

    之前解决这个问题都是通过js的attr赋值解决的,但是也一直不明白为什么audio直接在HTML中赋值报错.解决方法就是通过添加$sce过滤效果 app.filter("trustUrl&q ...

  5. alibaba/fescar 阿里巴巴 开源 分布式事务中间件

    Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题. 示例:https://github.com/windwant/ ...

  6. VMware两台虚拟机之间文件共享

    虚拟机A的文件拷贝到虚拟机B scp[参数][原路径][目标路径] eg: scp -r root@192.168.0.172:/home/rookie/下载/ /home/rooookie/下载/ ...

  7. http跳转https方法:百度云如何让http自动跳转到https【免费SSL证书使用FAQ】

    之前的一篇文章已经给大家提供了免费SSL证书的申请方法,这一篇文章是告诉大家在使用免费的SSL证书时可能会遇到的问题[怎么让http自动跳转到https以及http与https同时使用]的解决方法. ...

  8. dumpe2fs命令详解

    基础命令学习目录首页   dumpe2fs 显示ext2.ext3.ext4文件系统的超级快和块组信息.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE ...

  9. mkfs命令详解

    mkfs命令-->make filesystem的缩写:用来在特定的分区建立Linux文件系统     [命令作用] 该命令用来在特定的分区创建linux文件系统,常见的文件系统有ext2,ex ...

  10. NIO中的Buffer

    public abstract class Buffer { // Invariants: mark <= position <= limit <= capacity private ...