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. 2014牡丹江——Domination

    题目链接 题意: 给一个n*m的矩阵,每天随机的在未放棋子的格子上放一个棋子.求每行至少有一个棋子,每列至少有一个棋子的天数的期望  (1 <= N, M <= 50). 分析: 比較明显 ...

  2. OC-字典&数组运用实例:通讯录的实现

    需求实现: 一.定义联系⼈类ContactPerson 实例变量:姓名.性别.电话号码.住址.分组名称. 方法:初始化⽅方法(姓名.电话号码).显⽰示联系⼈信息 二.定义AddressBook类, 封 ...

  3. unbantu相关笔记

    很多项目使用的系统是centos或者redhat,最近有一个项目使用的系统竟然是阿里云unbantu,不知道他们负责人怎么想的,明明有centos,非要用unbantu.抱怨到此,unbantu的学习 ...

  4. jquery之提示信息

    //生成优惠券并分发 function saveCouponAssign(){ //发行券种 var couponTypeId = $("#couponTypeId").combo ...

  5. eclipse 404以及tomcat failed to start错误

    eclipse中的servlet项目有时会不编译,不编译可能就会出现404错误,因为在build path的输出目录并没有class文件,然而如果在输出目录引入之前编译的class文件,就可能出现cl ...

  6. Controller返回值类型ActionResult

    在mvc中所有的controller类都必须使用"Controller"后缀来命名 并且对Action也有一定的要求: 必须是一个public方法 必须是实例方法 没有标志NonA ...

  7. hadoop 2.6.0上安装sqoop-1.99.6-bin-hadoop200

    第一步:下载sqoop-1.99.6-bin-hadoop200.tar.gz  地址:http://www.eu.apache.org/dist/sqoop/1.99.6/ 第二步:将下载好的sqo ...

  8. C#图像处理(5):无损保存图片

    C#使用默认方法对图像进行保存的时候图像会有损失,以下提供无损保存的方法: /// <summary> /// 无损保存图片 /// </summary> /// <pa ...

  9. iOS在MRC工程环境下下使用ARC的方法

  10. C#获取客户端相关信息

    1.获取Uri参数 2.获取客户端操作系统.浏览器信息 3.获取客户端分辨率 4.C#判断用户是手机访问还是PC访问