题目链接

题意: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的更多相关文章

  1. E - Fire! UVA - 11624(bfs + 记录火到达某个位置所需要的最小时间)

    E - Fire! UVA - 11624 题目描述 乔在迷宫中工作.不幸的是,迷宫的一部分着火了,迷宫的主人没有制定火灾的逃跑计划.请帮助乔逃离迷宫.根据乔在迷宫中的位置以及迷宫的哪个方块着火,你必 ...

  2. kuangbin专题 专题一 简单搜索 Fire! UVA - 11624

    题目链接:https://vjudge.net/problem/UVA-11624 题意:一个迷宫,可能有一个或者多个地方着火了,每过1个时间消耗,火会向四周蔓延,问Joe能不能逃出迷宫,只要走出迷宫 ...

  3. Fire! UVA - 11624 (两步bfs)

    题目链接 题意 人要从迷宫走出去,火会向四个方向同时扩散 分析 两步bfs,先出火到达各地时的时间(设初始时间为0,人每走一步为1s,在着一步内火可以向四周可触及的方向同时扩散),然后在bfs人,人能 ...

  4. Fire uva 11624

    题目连接:http://acm.hust.edu.cn/vjudge/problem/28833 /* 首先对整个图bfs一次得到火焰燃烧的时刻表 之后在bfs搜路径时加一个火烧表的判断 坑点在于:如 ...

  5. UVA - 11624 J - Fire! (BFS)

    题目传送门 J - Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the ...

  6. UVa 11624 Fire!(着火了!)

    UVa 11624 - Fire!(着火了!) Time limit: 1.000 seconds Description - 题目描述 Joe works in a maze. Unfortunat ...

  7. UVA - 11624 Fire! bfs 地图与人一步一步先后搜/搜一次打表好了再搜一次

    UVA - 11624 题意:joe在一个迷宫里,迷宫的一些部分着火了,火势会向周围四个方向蔓延,joe可以向四个方向移动.火与人的速度都是1格/1秒,问j能否逃出迷宫,若能输出最小时间. 题解:先考 ...

  8. BFS(两点搜索) UVA 11624 Fire!

    题目传送门 /* BFS:首先对火搜索,求出火蔓延到某点的时间,再对J搜索,如果走到的地方火已经烧到了就不入队,直到走出边界. */ /******************************** ...

  9. UVA - 11624 Fire! 【BFS】

    题意 有一个人 有一些火 人 在每一秒 可以向 上下左右的空地走 火每秒 也会向 上下左右的空地 蔓延 求 人能不能跑出来 如果能 求最小时间 思路 有一个 坑点 火是 可能有 多处 的 样例中 只有 ...

随机推荐

  1. Bypass D盾_IIS防火墙SQL注入防御(多姿势)

    0X01 前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防御策略 ...

  2. Linux下安装配置MySQL

    一.删除原来的MySQL 在安装前要先确定系统是否已经安装了其他版本的MySQL,如已安装其他版本的MySQL,需先删除后再安装新版本. 1. 执行yum命令,删除MySQL的lib库,服务文件 yu ...

  3. [XPath] XPath 与 lxml (三)XPath 坐标轴

    本章我们将沿用上一章的 XML 示例文档. XPath 坐标轴 坐标轴用于定义当对当前节点的节点集合. 坐标轴名称 含义 ancestor 选取当前节点的所有先辈元素及根节点. ancestor-or ...

  4. 中文解码Unicode

    package com.j1.search.utils; import java.io.UnsupportedEncodingException; import java.net.URLDecoder ...

  5. java里面的getAttribute和findAttribute的区别

    findAttribute: abstract Object findAttribute(String name) Searches for the named attribute in page, ...

  6. IOS 通过脚本自动打包工具 webfrogs/xcode_shell

    博文转载至 http://www.2cto.com/kf/201506/408346.html ios 开发通过xcode 打包其实效率不是太高,所以就有人,用shell 写了一个,自动打包,发邮件, ...

  7. 《Lua程序设计》9.1 协同程序基础 学习笔记

    协同程序(coroutine)与线程(thread)差不多,也就是一条执行序列,拥有自己独立的栈.局部变量和指令指针,同时又与其他协同程序共享全局变量和其他大部分东西.从概念上讲线程与协同程序的主要区 ...

  8. 《Lua程序设计》第1章 开始 学习笔记

    1.1 程序块(chunk)每段代码(例如一个源代码文件或在交互模式中输入的一行代码),称为一个程序块.若使用命令行参数-i来启动Lua解释器,那么解释器就会在运行完指定程序块后进入交互模式.dofi ...

  9. Cookie和Session机制详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  10. 手机端点击复制链接到剪切板(以及PC端)

    一直在找如何能点击按钮将一串字符串放到手机的剪切板上,但是可能是因为搜索的关键字不对,一直无果. 向同事请教了一下,给了一个clickboard.js的插件.开始试验的时候,使用手机自带浏览器进行测试 ...