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】
题意 有一个人 有一些火 人 在每一秒 可以向 上下左右的空地走 火每秒 也会向 上下左右的空地 蔓延 求 人能不能跑出来 如果能 求最小时间 思路 有一个 坑点 火是 可能有 多处 的 样例中 只有 ...
随机推荐
- TCP三次握手原则
“已失效的连接请求报文段”的产生在这样一种情况下: client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server. 本来这是一 ...
- Discuz!X 3.4 任意文件删除漏洞复现过程(附python脚本)
今天看下群里在讨论Discuz!X 3.4 任意文件删除漏洞,自己做了一些测试,记录一下过程.结尾附上自己编写的python脚本,自动化实现任意文件删除. 具体漏洞,请查看 https://paper ...
- mosquitto 参数配置
mosquitto 参数配置 1.retry_interval 当QoS为1或2的消息已经被发送后,mosquitto在一段时间内仍未接收到客户端的反馈消息,将重新发送消息. 默认为20秒 2.sy ...
- JavaScript 简介--对javascript的初识,最基础的了解
一.javascript的介绍 JavaScript是网景(Netscape)公司开发的一种基于客户端浏览器.面向(基于)对象.事件驱动式的网页脚本语言.JavaScript语言的前身叫作Livesc ...
- struts1的配置文件详解
要想使用Struts,至少要依靠两个配置文件:web.xml和struts-config.xml.其中web.xml用来安装Struts框架.而struts-config.xml用来配置在Struts ...
- SQL Server 索引结构及其使用(一)[转]
SQL Server 索引结构及其使用(一) 作者:freedk 一.深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(cluster ...
- 【基础知识】列一下一个.Net WEB程序员需要掌握的知识
基础部分 C# 基础语法 OOP的概念,面向对象的理解 继承 封装 多态 ASP.NET MVC (Web Form 用的越来越少,如果你不熟悉,可以不看) JavaScript 基础语法 如何在HT ...
- 【Linux】 crontab 实现每秒执行
linux crontab 命令,最小的执行时间是一分钟, 如果要在小于一分钟执行.就要换个方法来实现 1 crontab 的延时: 原理:通过延时方法 sleep N 来实现每N秒执行. cr ...
- 原生js(一)
Element对象有以下重要属性: 1.style. a) Element的css样式 b) 可以通过elem.style.backgroundColor = "red"的形式才动 ...
- windows8 Metro App用Javascript来调用C#的library
(转自:http://www.ronaldwidha.net/2012/05/10/winrt-calling-c-csharp-class-libraries-from-winjs-javascri ...