J - Fire!---UVA 11624
题意:J代表Joe的位置,F代表火的起点,下一刻火将会向四周扩散,求Joe逃离的最短时间,如果不能逃离输出IMPOSSIBLE;
注意火的起点可能不止一处
可以用两次bfs分别求出人到达某个位置所用时间和火到达某个位置所用时间
#include<iostream>
#include<stdio.h>
#include<string.h>
#define INF 0xfffffff
#include<queue>
#include<algorithm>
using namespace std;
#define N 1010 int dir[][]={ {,},{-,},{,-},{,} };
char map[N][N];
int people[N][N], fire[N][N];//分别代表人和火到达该位置的时间;
int n, m, k, vis[N][N];
struct node
{
int x,y;
}f[N*N];//火的位置;可能不止一处; void FireBfs()
{
queue<node> Q;
node p, q;
memset(vis, , sizeof(vis));
memset(fire, -, sizeof(fire));
for(int i=; i<k; i++)
{
Q.push(f[i]);
fire[f[i].x][f[i].y] = ;
vis[f[i].x][f[i].y]=;
}
while(Q.size())
{
p = Q.front(); Q.pop();
for(int i=; i<; i++)
{
q.x=p.x+dir[i][];
q.y=p.y+dir[i][];
if(q.x>= && q.y>= && q.x<n && q.y<m && vis[q.x][q.y]== && map[q.x][q.y]!='#')
{
fire[q.x][q.y] = fire[p.x][p.y] + ;
vis[q.x][q.y] = ;
Q.push(q);
}
}
}
}
int PeopleBfs(node s)
{
queue<node> Q;
node p, q;
memset(vis, , sizeof(vis));
memset(people, -, sizeof(people));
Q.push(s);
people[s.x][s.y] = ;
vis[s.x][s.y] = ;
while(Q.size())
{
p = Q.front(); Q.pop();
if(p.x==||p.x==n-||p.y==||p.y==m-)
{
if((people[p.x][p.y] != - && people[p.x][p.y]<fire[p.x][p.y]) || (people[p.x][p.y] != -&&fire[p.x][p.y] == -) )//能到达边界并且在火到达之前;
return people[p.x][p.y];
} for(int i=; i<; i++)
{
q.x = p.x + dir[i][];
q.y = p.y + dir[i][];
if(q.x>= && q.x<n && q.y>= && q.y<m && vis[q.x][q.y]== && map[q.x][q.y]!='#')
{
people[q.x][q.y] = people[p.x][p.y] + ;
vis[q.x][q.y] = ;
Q.push(q);
}
}
}
return -;
}
int main()
{
int T; scanf("%d", &T);
while(T--)
{
node J;
scanf("%d%d", &n, &m);
k = ;
for(int i=; i<n; i++)
{
scanf("%s", map[i]);
for(int j=; j<m; j++)
{
if(map[i][j]=='J')
J.x = i, J.y = j;
if(map[i][j]=='F')
f[k].x = i,f[k++].y = j;
}
}
FireBfs();
int ans = PeopleBfs(J);
if(ans==-)
printf("IMPOSSIBLE\n");
else
printf("%d\n", ans);
}
return ;
}
J - Fire!---UVA 11624的更多相关文章
- E - Fire! UVA - 11624(bfs + 记录火到达某个位置所需要的最小时间)
E - Fire! UVA - 11624 题目描述 乔在迷宫中工作.不幸的是,迷宫的一部分着火了,迷宫的主人没有制定火灾的逃跑计划.请帮助乔逃离迷宫.根据乔在迷宫中的位置以及迷宫的哪个方块着火,你必 ...
- kuangbin专题 专题一 简单搜索 Fire! UVA - 11624
题目链接:https://vjudge.net/problem/UVA-11624 题意:一个迷宫,可能有一个或者多个地方着火了,每过1个时间消耗,火会向四周蔓延,问Joe能不能逃出迷宫,只要走出迷宫 ...
- Fire! UVA - 11624 (两步bfs)
题目链接 题意 人要从迷宫走出去,火会向四个方向同时扩散 分析 两步bfs,先出火到达各地时的时间(设初始时间为0,人每走一步为1s,在着一步内火可以向四周可触及的方向同时扩散),然后在bfs人,人能 ...
- Fire uva 11624
题目连接:http://acm.hust.edu.cn/vjudge/problem/28833 /* 首先对整个图bfs一次得到火焰燃烧的时刻表 之后在bfs搜路径时加一个火烧表的判断 坑点在于:如 ...
- UVA - 11624 J - Fire! (BFS)
题目传送门 J - Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the ...
- UVa 11624 Fire!(着火了!)
UVa 11624 - Fire!(着火了!) Time limit: 1.000 seconds Description - 题目描述 Joe works in a maze. Unfortunat ...
- UVA - 11624 Fire! bfs 地图与人一步一步先后搜/搜一次打表好了再搜一次
UVA - 11624 题意:joe在一个迷宫里,迷宫的一些部分着火了,火势会向周围四个方向蔓延,joe可以向四个方向移动.火与人的速度都是1格/1秒,问j能否逃出迷宫,若能输出最小时间. 题解:先考 ...
- BFS(两点搜索) UVA 11624 Fire!
题目传送门 /* BFS:首先对火搜索,求出火蔓延到某点的时间,再对J搜索,如果走到的地方火已经烧到了就不入队,直到走出边界. */ /******************************** ...
- UVA - 11624 Fire! 【BFS】
题意 有一个人 有一些火 人 在每一秒 可以向 上下左右的空地走 火每秒 也会向 上下左右的空地 蔓延 求 人能不能跑出来 如果能 求最小时间 思路 有一个 坑点 火是 可能有 多处 的 样例中 只有 ...
随机推荐
- 【代码审计】iCMS_v7.0.7 admincp.app.php页面存在SQL注入漏洞分析
0x00 环境准备 iCMS官网:https://www.icmsdev.com 网站源码版本:iCMS-v7.0.7 程序源码下载:https://www.icmsdev.com/downloa ...
- Linux下安装配置MySQL
一.删除原来的MySQL 在安装前要先确定系统是否已经安装了其他版本的MySQL,如已安装其他版本的MySQL,需先删除后再安装新版本. 1. 执行yum命令,删除MySQL的lib库,服务文件 yu ...
- oracle 排序字段自增长
<insert id="insertGoodsDescription" parameterClass="goodsDescription" > &l ...
- Javascript学习笔记--理解prototype
prototype和closure是js中两个不好搞懂的概念,幸好网上有很多相关的文章,在网上查了一遍以后,总是是觉得有点理解了.今天先说说prototype. 之前一直被ajax in action ...
- 墨菲定律:当你觉得一个地方可能有bug,那么这个地方就会有bug----顺带了解下Tomcat那少有人注意的localhost.log
一.问题概述 题目有点长,但应该值得后端java们了解下有点小坑的localhost.log,让我长话短说. 博主是搞java后端的.后台是很简单的spring mvc + spring框架. 今天测 ...
- 查看JVM使用的默认的垃圾收集器
一.查看步骤 cmd执行命令: java -XX:+PrintCommandLineFlags -version 输出如下(举例): 针对上述的-XX:UseParallelGC,这边我们引用< ...
- rpm包安装失败的解决办法
author: headsen chen date : 2018-10-15 14:24:36 1,故障现象: # rpm -ivh zabbix-agent--.el6.x86_64.rpm ...
- PHP生成页面二维码解决办法?详解
随着科技的进步,二维码应用领域越来越广泛,今天我给大家分享下如何使用PHP生成二维码,以及如何生成中间带LOGO图像的二维码. 具体工具: phpqrcode.php内库:这个文件可以到网上下载,如果 ...
- ELKStack
ELKStack简介 对于日志来说,最常见的需求就是收集.存储.查询.展示,开源社区正好有相对应的开源项目:logstash(收集).elasticsearch(存储+搜索).kiban ...
- hdu3974 Assign the task【线段树】
There is a company that has N employees(numbered from 1 to N),every employee in the company has a im ...