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. World Wind Java开发之十五——载入三维模型

    之前的一篇博客是关于载入粗三维模型的,见http://blog.csdn.net/giser_whu/article/details/43452703,这个地方还存在着不能载入纹理的问题,一直没呢解决 ...

  2. android AsyncTask 详细例子

    一个典型AsyncTask的. 01 public class DialogTestActivity extends Activity { 02     private Button button1; ...

  3. python 安装 memcache

    方式一: python3 -m pip install python-memcached 方式二: pip3 install python-memcached 方式三: tar zxf python- ...

  4. 将excel的.xlsx文件转成数据库文件.db的方法

    1.下载好工具SQLite Expert Professional 3 ,晚上有很多,自行百度. 2.打开.xls文件,将文件另存为.csv文件.说明一下: 可以将xls文件看作是数据库里的一个表.所 ...

  5. silverlight visifire控件图表制作——silverlight 后台方法页面事件

    1.返回事件 (1.返回silverlight页面,2.返回web页面) private void button_ClickBack(object sender, RoutedEventArgs e) ...

  6. Java图片工具类,完成图片的截取和任意缩放

    package com.common.util; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Renderin ...

  7. String类的使用说明

    (1)Length()取一个字符串的长度:public int length(); public calss StringLength1{ public static void main(String ...

  8. UVa 679 小球下落 简单模拟题,树

    题目大意:给你一个完全二叉树,并且给他们编号,编号规则为左子树为2*k,右子树为2*k+1,每一个节点 上都有一个开关,初始时开关都处于关闭状态,小球碰到节点就会改变该点的开关的状态.然后给你I个小球 ...

  9. win7添加usb3.0驱动(错误代码1392,文件或目录损坏且无法读取)

    Win7添加usb3.0驱动 之前一直按照网上的方法执行dism命令挂载时,总是失败,错误代码1392,显示原因是文件或目录损坏且无法读取.这个错误以前在装机时老是出现导致系统安装不成功,在BIOS中 ...

  10. android布局常用属性记录

    android布局常用属性记录   http://blog.csdn.net/xn4545945/article/details/7717086这里有一部分别人总结的其余的: align:对齐 par ...