uva11624 - Fire!

火在蔓延,人在走。火会蔓延,不会熄灭,我们可以确定某个点着火的时间(广搜)。对于J来说,要是他走到某点的时间比火蔓延到该点的时间要短,那么他走到该点的时候,火还没蔓延过来,他就可以走到该点,否则,不能进入该点。

数据地图表示:

-1         该点是墙或已经走过,不能走

-2         该点是通道还没有走过,火还没蔓延过来,可以走

0-x       该点在第x秒时,火能蔓延到该点

处理过程:

(1)输入并初始化,初步处理地图数据

(2)广搜标记地图,确定火蔓延情况

(3)广搜逃亡路线。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue> using namespace std; int n,m; //地图大小
int sx,sy; //起始位置
int map[1002][1002]; //地图存储。“-1”是不能走,“-2” 是能走,“0-x”是火蔓延过来的时间
int dir[4][2]={1,0,0,1,-1,0,0,-1}; //四个方向 struct node //搜索结构体
{
int x;
int y;
int step;
}s,e; queue<node> q; //搜索共用队列 void initial() //地图,队列初始化
{
int i,j;
char x[1002]; //暂存数组 memset(map,-1,sizeof(map)); //全部初始化为0
while(!q.empty())q.pop(); //情况队列 cin>>n>>m; for(i=0;i<n;i++) //输入地图,并处理
{
cin>>x;
for(j=0;j<m;j++)
{
if(x[j]=='.')map[i][j]=-2; //此处可走
else if(x[j]=='F') //此处有火
{
map[i][j]=0;
s.x=i;
s.y=j;
s.step=0;
q.push(s);
}
else if(x[j]=='J')sx=i,sy=j; //起点
} //由于最开始全部赋值为-1,都默认为不能走,所以,输入为“#”时,不用再处理
} while(!q.empty()) //广度优先搜索,确定火蔓延到每个点的时间【可能蔓延不到】
{
s=q.front();
q.pop(); for(i=0;i<4;i++)//四个方向搜索
{
e.x=s.x+dir[i][0];
e.y=s.y+dir[i][1];
e.step=s.step+1;
if(e.x<0||e.x>=n||e.y<0||e.y>=m||map[e.x][e.y]!=-2)continue; //该点在地图外面或该点不可被蔓延,不处理该点
map[e.x][e.y]=e.step; //记录蔓延过来的时间
q.push(e);
} }
} int bfsescap() //逃亡广搜,能逃亡成功就返回时间,否则,返回-1
{
s.x=sx;
s.y=sy;
s.step=1;
map[sx][sx]=-1;
q.push(s); //起点入队 while(!q.empty())
{
s=q.front(); if(s.x==n-1||s.x==0||s.y==m-1||s.y==0) return s.step; //起点要判断,放这里更合适【这点的疏忽,让我郁闷了三天】逃亡成功 q.pop(); for(int i=0;i<4;i++) //四个方向搜索
{
e.x=s.x+dir[i][0];
e.y=s.y+dir[i][1];
e.step=s.step+1;
if(e.x<0||e.x>=n||e.y<0||e.y>=m||(map[e.x][e.y]!=-2&&map[e.x][e.y]<e.step))continue; //不可走,不处理
map[e.x][e.y]=-1;
q.push(e);
} }
return -1; //所有能走的地方都走了,还是没有逃出去。逃亡失败
} int main()
{
int t; cin>>t; //案例测试数据组数 while(t--)
{
initial(); //输入,赋值处理等初始化 int ans=bfsescap(); //逃亡广搜 if(ans==-1)cout<<"IMPOSSIBLE"<<endl; //结果分析,所有能走的节点都走过了,还没有逃出迷宫
else cout<<ans<<endl;
} return 0;
}

uva11624 - Fire!的更多相关文章

  1. UVA11624 Fire! —— BFS

    题目链接:https://vjudge.net/problem/UVA-11624 题解: 坑点:“portions of the maze havecaught on fire”, 表明了起火点不唯 ...

  2. uva11624 Fire! (bfs预处理)

    题目链接:https://vjudge.net/problem/UVA-11624 题意:给一个1000×1000的矩阵,有几个着火点和Joe,着火点和Joe每个单位时间均移动一个单位,求Joe逃出的 ...

  3. 「日常训练」 Fire!(UVA-11624)

    与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...

  4. 【UVA - 11624】Fire!

    -->Fire! 直接上中文 Descriptions: 乔在迷宫中工作.不幸的是,迷宫的一部分着火了,迷宫的主人没有制定火灾的逃跑计划.请帮助乔逃离迷宫.根据乔在迷宫中的位置以及迷宫的哪个方块 ...

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

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

  6. 关于SequeezeNet中的Fire Module

    在论文<SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE>中,作者 ...

  7. FZU 2150 Fire Game

    Fire Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  8. Fire

    Fire 分析: 首先,明确题意:b1,b2,--,bn 交换为b2,--,bn,b1,但这并不是意味着只能从b1开始交换,(这点从样例中可以看出),并且也不意味着交换的必须是连续的一串,可以是几个单 ...

  9. Android 轻量级输入校验库:Fire Eye

    Fire Eye是一款轻量级简单易用的Android校验库. FireEye 2.0 在 1.0 的基础上,全部重写了代码,并优化了架构,性能上和逻辑上都大大提升.只需要几行代码,即可验证用户输入,并 ...

随机推荐

  1. OpenMp 基本

      OpenMp是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性的编译处理方案(Compiler Di ...

  2. samba服务器详细配置(非域模式)

    组成Samba运行的有两个服务,一个是SMB,另一个是NMB:SMB是Samba 的核心启动服务,主要负责建立Samba服务器与Samba客户机之间的对话,验证用户身份并提供对文件和打印系统的访问,只 ...

  3. oracle以web方式登录EM、ISQLPlus

    1. 检查主机名/IP.端口安装时的主机名/IP.端口记录在$ORACLE_HOME/install/portlist.ini 文件中.缺省是:一般用户                     htt ...

  4. VCS仿真生成fsdb文件(Verilog)

    VCS仿真生成fsdb文件(Verilog) 一.环境 Linux 平台 csh环境 VCS 64bit Verdi3 二.开始仿真 1. 联合仿真环境配置 a.在testbench中加入如下语句: ...

  5. css_day7

  6. javascriptt切换组件MyTab.js封装

    之前做的大多数是jquery的插件,就优雅性来说,我觉得还是原生的代码,写起来更舒服一点,虽然麻烦很多. 之前写了一个利用完美运动框架的轮播效果,因为使用的是原生的代码,因为不懂原生对象封装的原因一直 ...

  7. Easyui 排序时 自动向后排传sort order 你妹真坑爹

    request 的时候 发现 sort 竟然是个数组!

  8. Android Studio tips and tricks 翻译学习

    Android Studio tips and tricks 翻译 这里是原文的链接. 正文: 如果你对Android Studio和IntelliJ不熟悉,本页提供了一些建议,让你可以从最常见的任务 ...

  9. trailingZeroes

    Given an integer n, return the number of trailing zeroes in n!. 给一个数字n,返回它n!数字后面有多少个0. public class ...

  10. 为什么要用Math.sqrt(i)方法

    java 练习题 判断 101-200 之间有多少个素数,并输出所有素数 public class Prime { public static int count = 0; public static ...