题意:
     给1个n*m的网格,上面有的点能走,有的点不能走(墙),然后有的点是火源,火源和人一样,每次都是上下左右四个方向蔓延,速度一样是1,火也不可以从墙上跨过去,给你人的起点,终点是只要走到边界就行,就是走出矩阵,问你最小逃生时间。

思路:
      一开始小卡了一下,过了一会马上反应过来了,这个题算是基本的广搜题吧!我们想下他跟我们见过的最最基本的广搜有什么区别?是不是就是多了几个火源,而火源的作用是什么,是不是就是在蔓延的时候把一些能走的点变成不能走了,既然火源的速度和人一样,那么我们可以把火源和人全都放入队列<记住,要先把所有的火源放进去,最后在放人>,然后所有点(火源还有人)走过的点都不能再走了,就完事了呗!这个题目有很多方法,如果你想的话 还可以先处理火源,把每个点最早到达的火源的时间记录下来,用所有的火源把地图处理完了之后再跑广搜(这个是白书给出的思路),不过感觉写着比较麻烦,我的代码<一开始说的方法>在下面,具体细节可以看代码。

#include<queue>
#include<stdio.h>
#include<string.h>

#define N 1000 + 10

using namespace std;

typedef struct
{
   int x ,y ,t ,mk;
}NODE;

NODE xin ,tou;
queue<NODE>q;
bool map[N][N];
int R ,C ,dir[4][2] = {0 ,1 ,0 ,-1 ,1 ,0 ,-1 ,0};

bool ok(int x ,int y)
{
   return x >= 1 && x <= R && y >= 1 && y <= C && !map[x][y];
}

int BFS()
{
   while(!q.empty())
   {
      tou = q.front();
      q.pop();
      for(int i = 0 ;i < 4 ;i ++)
      {
         xin.x = tou.x + dir[i][0];
         xin.y = tou.y + dir[i][1];
         xin.t = tou.t + 1;
         xin.mk = tou.mk; 
         if(xin.mk && (xin.x == 0 || xin.x == R+1 || xin.y == 0 || xin.y == C + 1))
         return xin.t;
         if(ok(xin.x ,xin.y))
         {
           
            map[xin.x][xin.y] = 1;
            q.push(xin);
         }
      }
   }
   return -1;
}

int main ()
{
   int i ,j ,Ans ,t ,mkx ,mky;
   char str[N];
   scanf("%d" ,&t);
   while(t--)
   {
      scanf("%d %d" ,&R ,&C);
      while(!q.empty())q.pop();
      for(i = 1 ;i <= R ;i ++)
      {
         scanf("%s" ,str);
         for(j = 0 ;j < C ;j ++)
         {
            if(str[j] == '.') map[i][j+1] = 0;
            else if(str[j] == '#') map[i][j+1] = 1;
            else if(str[j] == 'J')
            {
               map[i][j+1] = 1;
               mkx = i ,mky = j + 1;
            }
            else
            {
                map[i][j+1] = 1 ,xin.x = i ;
                xin.y = j + 1 ,xin.t = 0;
                xin.mk = 0; 
                q.push(xin);
            }
         }
      }
      xin.x = mkx ,xin.y = mky ,xin.t = 0 ,xin.mk = 1;
      q.push(xin);
      /*     
      puts("***************");
      while(!q.empty())
      {
         tou = q.front();
         q.pop();
         printf("%d %d %d %d**\n" ,tou.x ,tou.y ,tou.t ,tou.mk);
      }
      puts("**************"); */
      Ans = BFS();  
      Ans == -1 ? puts("IMPOSSIBLE"):printf("%d\n" ,Ans);
   }
   return 0;
}

UVA11624大火蔓延的迷宫相关推荐

  1. UVA11624 Fire!(bfs)

    相信大家已经读过题目了,我就搬一下洛谷的翻译: 题目大意 你的任务是帮助Joe走出一个大火蔓延的迷宫.Joe每分钟可以走到上下左右4个方向的相邻格子之一,而所有着火的格子都会四周蔓延(即如果某个空格子 ...

  2. 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】

    POJ3126Prime Path 给定两个四位素数a  b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位 ...

  3. 图论算法与模型(训练指南题库)

    一.基础题目 1.UVA 11624 Fire!迷宫问题 多源BFS 题意: 帮助joe走出一个大火蔓延的迷宫,其中joe每分钟可往上下左右四个方向之一走,所有着火的格子都会蔓延(空格与着火格有公共边 ...

  4. CARTA:Gartner的持续自适应风险与信任评估战略方法简介

    在2017年6月份举办的第23届Gartner安全与风险管理峰会开幕式上,来自Gartner的三位VP级别的分析师(Ahlm, Krikken and Neil McDonald)分享一个题为< ...

  5. 左手菲尔兹右手突破奖,这个中国女婿其实是英国贵族?拿到300万奖金后他这样说……...

    全世界只有3.14 % 的人关注了 爆炸吧知识 如果说科学界里高大上的奖项,你还是只能想到诺贝尔,菲尔兹,那可能真的是out了. 毕竟现在都0202年了.少年,突破奖了解一下? 作为有马云,马化腾,还 ...

  6. 今日芯声 | 大大大!世界上最大的移动电源将前往北极圈

    "今日芯声"是读芯术推出的一档简读栏目,汇聚每日国内外最新最热的AI应用资讯,敬请关注. 1.最大移动电源:世界首座浮动核电站前往北极圈 (IT之家)根据美国大众机械的报道,8月2 ...

  7. 《中国通史》纪录片100集笔记(持更)

    注:本人是从看了殷商兴亡开始才有做笔记的打算,然鹅前面六集忘光光了,强迫症使我想要整齐的笔记,故前六集借鉴了豆瓣上的一个笔记,第七集开始自己写,豆瓣只到十一集,十一集后纯原创 https://movi ...

  8. Alibaba iOS 工程架构腐化治理实践

    " 业务开发遇到环境问题越来越多,严重影响开发效率,有些表面看似打包问题,背后却是工程架构的腐化." 背景 近年来,iOS工程复杂度高的负面影响逐渐暴露,很多同学都受到了iOS打包 ...

  9. 基于智能和视觉的火灾检测系统:调查 (论文翻译)

    英文版论文原文:英文版论文链接地址 基于智能和视觉的火灾检测系统:调查 Intelligent and Vision-based Fire Detection Systems: a Survey Fe ...

最新文章

  1. 论文返修(response letter)最有用的开场白
  2. html如何调整背景图片大小_如何快速调整证件照背景色和大小!(简单快速)...
  3. 九、多表模型创建,一对一,一对多,基于对像的多表模型等
  4. Azkaban运行报错:我找到的几个错误问题
  5. 服务器消息不是按顺序来的,消息队列之 RocketMQ(示例代码)
  6. 分布式监控系统开发【day38】:报警阈值程序逻辑解析(三)
  7. linux第三课:一些注意点
  8. 2014蓝桥杯:地宫取宝(DFS详解)
  9. django模板_Django模板
  10. android aes256加密算法,Android中AES256加密的实现
  11. html 复选框全选、反选操作
  12. 用 toto 快速建轻量级博客
  13. Django菜鸟入门
  14. 金蝶K3系统中间层群集部署方案
  15. 快速了解Spyder
  16. 聚类分析的基本概念和方法
  17. javaFX裁剪视频exe
  18. 计算机一级excel中模拟运算,excel2000计算机一级专题.docx
  19. 小萨村的激光SLAM学习笔记
  20. 【我的C语言学习进阶之旅】介绍一下NDK开发中关于JNI函数的两种注册方式:静态注册和动态注册

热门文章

  1. 《Linux设备驱动开发详解 A》一一2.3 接口与总线
  2. thinkphp集成系列之phpmailer批量发送邮件
  3. String , StringBuffer 和 StringBuilder 区别
  4. 大型门户网站架构设计的可伸缩性
  5. Win2000域控制器+Exchange2000迁移至Win2003域控制器+Exchange2003
  6. 石川es6课程---11、json
  7. 黑马lavarel教程---11、响应处理
  8. JZ2440开发笔记(4)——设置静态IP
  9. table表格固定前几列,其余的滚动
  10. Mysql安装时出现APPLY security settings错误