题目描述

贪玩的吉米又去玩迷宫游戏了,这次迷宫里除了吉米,还有一只火焰精灵(火焰精灵有且只有一只)。对于吉米来说,他从一个房间走到下一个房间需要一分钟。对于火焰精灵,它会不断放出火焰,一旦某个房间着火了,下一分钟这个房间上下左右四个房间都会着火。火焰的范围不会超出迷宫,所以迷宫外都是安全的区域。

迷宫可以用一个n*m的字符矩阵来表示,如果第i行j列为’.’,表示这个房间可以通行。

如果第i行j列为’#’,表示这个位置是障碍物,障碍物不会被燃烧。

如果第i行j列为’J’,表示吉米在这个房间。

如果第i行j列为’F’,表示火焰精灵在这个房间。

吉米的目标就是安全逃出这个迷宫,当吉米的位置(x,y) 不在迷宫的范围内时,便认为吉米逃出了迷宫。

注意,火焰精灵一开始所在的房间是着火的。

输入格式

第一行包括两个正整数n,m ( 1 <= n,m <= 1000),表示迷宫为n行m列

接下来有一个n*m的字符矩阵,表示迷宫

输出格式

如果吉米可以逃出迷宫,输出吉米用的最小时间,否则输出”IMPOSSIBLE”.

样例输入

4 4

####

#JF#

#..#

#..#

样例输出

3

此题的妙点在于将火灵和小吉吉的路径都分开进行dfs,然后在小吉吉的路径中进行ans的处理,然后最重要的就是小吉吉想要通过这一条路就必须得比火灵先到达所以(step2[f.x][f.y] + 1 < step[nx][ny])//就是这一段(71行代码),才能继续进行

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <set>
using namespace std;
typedef long long ll;
const int maxx = 2023;
const int INF = 0x3f3f3f3f;
char a[maxx][maxx];
int step[maxx][maxx], step2[maxx][maxx];//吉米和火零
int x1, x2, y1, y2;
int n, m;
int dx[] = { -1, 1, 0, 0 };//方向
int dy[] = { 0, 0, 1, -1 };
struct check//进行初始化
{int x, y;check(int xx = 0, int yy = 0){x = xx;y = yy;}
};
void bfs1()//火灵的路径
{memset(step, 0x3f, sizeof(step));queue<check> q;q.push(check(x1, y1));step[x1][y1] = 0;while (!q.empty()){check f = q.front();q.pop();for (int i = 0; i < 4; i++)//依次进行{int nx = f.x + dx[i];int ny = f.y + dy[i];if (nx >= 0 && ny >= 0 && ny < m && nx < n)//未越界{if (a[nx][ny] != '#' && step[nx][ny] == 0x3f3f3f3f){q.push(check(nx, ny));step[nx][ny] = step[f.x][f.y] + 1;//对应位置步数++}}}}
}
int bfs2()
{memset(step2, 0x3f, sizeof(step2));//初始化 queue <check> q;q.push(check(x2, y2));step2[x2][y2] = 0;while (!q.empty()){check f = q.front();q.pop();for (int i = 0; i < 4; i++){int nx = f.x + dx[i];int ny = f.y + dy[i];if (nx >= 0 && ny >= 0 && nx < n && ny < m){if (a[nx][ny] != '#' && step2[nx][ny] == 0x3f3f3f3f && step2[f.x][f.y] + 1 < step[nx][ny])//在之前的前提下还得{                                                                                         //比在火侵蚀之前到达q.push(check(nx, ny));step2[nx][ny] = step2[f.x][f.y] + 1;//时间++ }}else//越界了就逃出了 {return step2[f.x][f.y] + 1;//最后一步 }}}return -1;//没能逃出
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n >> m;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++)//取出位置 {cin >> a[i][j];if (a[i][j] == 'F'){x1 = i;y1 = j;}else if (a[i][j] == 'J'){x2 = i;y2 = j;}}}bfs1();int ans = bfs2();//最短 时间 if (ans == -1){cout << "IMPOSSIBLE" << endl;}else{cout << ans << endl;}return 0;
}//妙妙妙

红红火火恍恍惚惚(bfs_plus.2)(知道吉米你很急!)相关推荐

  1. 外贸客户催货催的很急的原因

    很多时候我们还没收到客户的款项,或者是客户的款项刚刚收到,然后就有的客户开始一直催着发货. 如果非要用一个例子去说明,那可能就是如同网购或者微商刚刚流行起来的时候,很多人是很谨慎地在网上购物,而且是非 ...

  2. java怎么给文本框加滚动条_懂Java中Swing的朋友,谁能帮我在Jtextare上加一个滚动条啊?很急!...

    懂Java中Swing的朋友,谁能帮我在Jtextare上加一个滚动条啊?很急! 关注:147  答案:2  信息版本:手机版 电脑版 解决时间 2021-01-13 13:01 提问者当我没来过 2 ...

  3. 高手帮忙,菜鸟提问关于Query的基础问题!很急!就剩这些分了!好心人帮忙!

    高手帮忙,菜鸟提问关于Query的基础问题!很急!就剩这些分了!好心人帮忙! Delphi / Windows SDK/API http://www.delphi2007.net/DelphiDB/h ...

  4. 英伟达赚钱能力创历史新高,老黄:GPU供不应求我也很急

    问耕 发自 凹非寺 量子位 出品 | 公众号 QbitAI 英伟达不愧是英伟达. 昨晚,美国股市再次遭遇重挫,道琼斯指数惨烈下跌1033点,创出史上第二大单日下跌记录.市场一片愁云惨淡,累及全球股市. ...

  5. matlab usewhitebg,我有一个matlab的程序运行出错,各位大神求救,很急啊

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function varargout = Newton_Ring(varargin)% NEWTON_RING M-file for Newton_Rin ...

  6. html如何设置鼠标选中状态,怎么用CSS 设置 当鼠标移动到菜单时,该按钮变色,鼠标点击后,页面停留在鼠标滑过时的状态!!很急!...

    用javascript就可以,基本代码在下面,你自己照着改吧 html head meta http-equiv=Content-Type content=text/html;charset = gb ...

  7. 数据挖掘 股价预测_股票成交量很低,但股价跌得快,说明了什么?(此文无价)...

    股票成交量很低,但股价跌得快,预示着什么? 量价关系,背后反映的是市场行为,如果能看到大众的心理,那就是更深层次的理解了.很多人看k线图,用趋势线.形态.指标等分析一通,感觉能预测未会怎么走.仅仅对历 ...

  8. 为什么都建议程序员不要做“外包”?看完这些经历,很辛酸

    在程序员圈子里面,外包程序员似乎永远处于一个尴尬的角色,如果你说他们不是程序员吧,他们也是程序员.应该说是外包这个词比较尴尬吧. 其实我们身边也有很多外包程序员,我身边也有从外包进一线互联网企业的例子 ...

  9. 很合理,但是有病的奇怪网站合集

    这年头有很多稀奇古怪的软件,网站,无聊的时候可以打发时间,或者分享给朋友乐呵一下 俗话说,存在即合理,所以说它们合理,但是又没啥用,所以说有病 今天就来盘点一波 在线发音转换器 地址:https:// ...

最新文章

  1. spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获
  2. 2.1.1进程的概念 组成和特征
  3. 遇到tensorflow has no attribute 问题
  4. 输出联系变化的数字seq
  5. C语言内存管理之结构体
  6. 微盟数据库的涅槃之旅
  7. python14张思维导图高清pdf_程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)...
  8. Mongodb 集群实战
  9. Android笔记 消息机制handler+http之 网络图片浏览器demo
  10. PP-OCR论文笔记
  11. [转]Mysql FROM_UNIXTIME as UTC
  12. Codeforces Beta Round #14 (Div. 2) D. Two Paths 树的直径
  13. C++ cout的使用,看这一篇就够了
  14. 在微信公众平台做HTML5游戏经验谈
  15. Office2016软件安装教程
  16. 如何在线免费对PDF文档进行解密
  17. Tomcat部署多个Sring Boot项目时Unable To Register MBean Exception的一种解决方法
  18. Validation and Data leakages
  19. 一般企业里的服务器采用的是什么系统?windows?还是linux?
  20. 高性能RabbitMQ消息队列介绍 及 SpringBoot整合

热门文章

  1. matlab三相异步电动机仿真,三相异步电动机的MATLAB仿真研究
  2. 一文搞懂全排列、组合、子集问题
  3. NSSCTF web题记录
  4. CSDN“2019 优秀AI、IoT应用案例TOP 30+”正式发布
  5. 在MTK平台里,,函数kal_prompt_trace起什么作用???Kal_prompt_trace的参数有表示什么?...
  6. 新加坡没有改变对 Web3 的立场
  7. 在中国搞自动驾驶,没有人不羡慕滴滴
  8. vue3.0需要学习的技术栈
  9. 改名叫Benson...
  10. 对鸡你太美的字符画绘制