UVA11624_Fire!
在一个矩形方阵里面,一个人要从一个位置走向另一个位置,其中某些地方有火源,每过一分钟,火源就会点燃相邻的点,同时相邻的点也变成了火源。人不能通过有火的点。问一个人能够安全地走到目的地去?最短时间多少?
氺题不多说,直接预处理每个点的起火时间,然后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!的更多相关文章
随机推荐
- Cocos2d-x Lua 学习
mian.lua 文件是程序的入口.加载GameScene场景,调用场景方法. GameScene.lua 文件负责创建游戏主场景,主要写场景方法,由主函数调用.
- 使用json.dumps转换django queryset的datatime报错问题解决
转换成json时使用的方法如下: json.dumps(list(models.userlist.objects.values("vu"))) 报错信息如下: Traceback ...
- 基于Python的信用评分卡模型分析(一)
信用风险计量体系包括主体评级模型和债项评级两部分.主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用“四张卡”来表示,分别是A卡.B卡.C卡和F卡:债项评级模型通常按照主体的融资用途,分为 ...
- rename命令详解
基础命令学习目录首页 原文链接:http://man.linuxde.net/rename 将main1.c重命名为main.c rename main1.c main.c main1.c renam ...
- Kubernetes探索学习002--Kubernetes的基本使用
Kubernetes 的基本使用方法 原则:使用YAML文件描述你要部署的API对象! 以部署nginx静态站点为例,具体操作及内容如下 1.编写YAML文件 [root@kubernetes01 ~ ...
- 分布式高并发下全局ID生成策略
数据在分片时,典型的是分库分表,就有一个全局ID生成的问题.单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求: 1 不能有单点故障. 2 以时间为序,或者ID里包含时间 ...
- 前端_JQuery
使用参考:http://jquery.cuishifeng.cn/ 目录 jQuery是什么 jQuery对象 寻找元素(选择器和筛选器) 选择器 表单属性选择器 筛选器 操作元素(属性.css.文档 ...
- Django_csrf
CSRF攻击介绍 CSRF 攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作.比如说,受害者 Bob 在银行有一笔存款,通过对银行的 ...
- iOS静态库.a总结(2017.1.24增加脚本打包方法)
修改于:2017.1.24 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 a.开源库 公开源代码,能看到具体实现 ,比如SDWebImag ...
- LeetCode 655. Print Binary Tree (C++)
题目: Print a binary tree in an m*n 2D string array following these rules: The row number m should be ...