B-逃脱

  • 题解
  • 讨论
  • 查看他人的提交
  • 我的提交

题号:NC14548
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

这是mengxiang000和Tabris来到幼儿园的第四天,幼儿园老师在值班的时候突然发现幼儿园某处发生火灾,而且火势蔓延极快,老师在第一时间就发出了警报,位于幼儿园某处的mengxiang000和Tabris听到了火灾警报声的同时拔腿就跑,不知道两人是否能够逃脱险境?

幼儿园可以看成是一个N*M的图,在图中一共包含以下几种元素:

“.”:表示这是一块空地,是可以随意穿梭的。

“#”:表示这是一块墙,是不可以走到这上边来的,但是可以被火烧毁。

“S”:表示mengxiang000和Tabris所在位子。

“E”:表示幼儿园的出口。

“*”表示火灾发源地(保证输入只有一个火灾发源地)。

已知每秒有火的地方都会向周围八个格子(上下左右、左上、右上、左下、右下)蔓延火势.mengxiang000和Tabris每秒都可以选择周围四个格子(上下左右)进行移动。(假设两人这一秒行动完之后,火势才蔓延开)

根据已知条件,判断两人能否成功逃脱险境,如果可以,输出最短逃离时间,否则输出T_T。

为了防止孩子们嬉戏中受伤,墙体是橡胶制作的,可以燃烧的哦。

输入描述:

第一行输入一个整数t,表示一共的测试数据组数。
第二行输入两个整数n,m,表示幼儿园的大小。
接下来n行,每行m个字符,表示此格子是什么元素。
t<=200
3<=n<=30
3<=M<=30
保证图中有一个起点,一个出口,一个火灾源处

输出描述:

每组数据输出一行,如果两人能够成功到达出口,那么输出最短逃离时间,否则输出T_T

示例1

输入

复制

3
5 5
*....
.....
..S#.
...E.
.....
5 5
...#*
..#S#
...##
....E
.....
5 5
.....
S....
..*#.
...E.
.....

输出

复制

2
T_T
T_T

说明

为了防止孩子们嬉戏中受伤,墙体是橡胶制作的,可以燃烧的哦。

备注:

为了防止孩子们嬉戏中受伤,墙体是橡胶制作的,可以燃烧的哦。
//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<list>
#include<set>
#include<iomanip>
#include<cstring>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cassert>
#include<sstream>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
typedef long long  ll;
#define ls (p<<1)
#define rs (p<<1|1)
#define mid (l+r)/2
#define over(i,s,t) for(register long long i=s;i<=t;++i)
#define lver(i,t,s) for(register long long i=t;i>=s;--i)
const int MAXN = 305;
const int INF = 0x3f3f3f3f;
const int N=5e4+7;
const int maxn=1e5+5;
const double EPS=1e-10;
const double Pi=3.1415926535897;
//inline double max(double a,double b){
//    return a>b?a:b;
//}
//inline double min(double a,double b){
//    return a<b?a:b;
//}int xd[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int yd[8] = {1, 0, -1, 0, -1, 1, -1, 1};//void Fire(){
//    queue<node> p;
//    p.push({fx,fy,0});
//    memset(fire, -1, sizeof(fire));
//    fire[fx][fy]=0;
//    while(!p.empty()){
//        node temp=p.front();
//        p.pop();
//        for(int i=0;i<8;i++){
//            int x=temp.x+xd[i];
//            int y=temp.y+yd[i];
//            if(x<0||x>=n||y<0||y>=m||fire[x][y]!=-1){
//                continue;
//            }
//            fire[x][y]=temp.val+1;
//            p.push({x,y,temp.val+1});
//        }
//    }
//}
//int bfs(){
//    queue<node> p;
//    memset(vis, 0, sizeof(vis));
//    p.push({sx,sy,0});
//    while (!p.empty()) {
//        node temp=p.front();
//        vis[temp.x][temp.y]=1;
//        p.pop();
//        for(int i=0;i<4;i++){
//            int x=temp.x+xd[i];
//            int y=temp.y+yd[i];
//            if(x<0||x>=n||y<0||y>=m)  continue;
//            if(x==ex&&y==ey&&temp.val+1<=fire[x][y]) return temp.val+1;
//            if(vis[x][y]||temp.val+1>=fire[x][y]||a[x][y]=='#') continue;
//            p.push({x,y,temp.val+1});
//        }
//    }
//    return -1;
//}
int n,m,t;
char a[35][35];
int vis[35][35];
struct node{int x,y;int step;
};
int sx,sy,ex,ey,cx,cy;
int fire[35][35];
void Fire(int x,int y){memset(fire, -1, sizeof(fire));queue<node> p;p.push({x,y,0});while (!p.empty()) {node q=p.front();p.pop();for(int i=0;i<8;i++){int xx=q.x+xd[i];int yy=q.y+yd[i];if(xx<0||xx>=n||yy<0||yy>=m||fire[xx][yy]!=-1){continue;}p.push({xx,yy,q.step+1});fire[xx][yy]=q.step+1;}}
}
int bfs(int x,int y){queue<node> p;memset(vis, 0, sizeof(vis));p.push({x,y,0});while (!p.empty()) {node q=p.front();p.pop();vis[q.x][q.y]=1;for(int i=0;i<4;i++){int xx=q.x+xd[i];int yy=q.y+yd[i];if(xx<0||xx>n-1||yy<0||yy>m-1) continue;if(a[xx][yy]=='E'&&fire[xx][yy]>=q.step+1) return q.step+1;if(a[xx][yy]=='#'||vis[xx][yy]||fire[xx][yy]<=q.step+1) continue;p.push({xx,yy,q.step+1});}}return -1;
}
int main()
{cin>>t;while (t--) {cin>>n>>m;int ans=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>a[i][j];if(a[i][j]=='*'){cx=i;cy=j;}if(a[i][j]=='S'){sx=i;sy=j;}if(a[i][j]=='E'){ex=i;ey=j;}}}Fire(cx, cy);ans=bfs(sx,sy);if(ans<0) cout<<"T_T"<<endl;else cout<<ans<<endl;}
}

NC14548-B-逃脱(bfs)相关推荐

  1. B-监狱逃脱(BFS)

    监狱逃脱 简单的BFS搜索 数组清空使我裂开 memset(vis, 0, sizeof(int));//只清空第一位memset(vis, 0, sizeof(vis));//全部清空memset( ...

  2. 哈理工第六届程序设计大赛 G 逃脱(BFS)

    思路:一开始我预处理了每个格子被火燃烧的最短时间然后BFS,WA到不能自理,后来没预处理直接都扔进队列里就A了... #include<bits/stdc++.h> using names ...

  3. 算法题(四十):BFS解决网易2017年笔试题——地牢逃脱

    题目描述 给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一 ...

  4. 地牢逃脱(BFS(广度优先搜索))

    题目描述 给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一 ...

  5. 地牢大师--(BFS+三维数组)

    题目 你现在被困在一个三维地牢中,需要找到最快脱离的出路! 地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接通过,部分包含岩石障碍无法通过. 向北,向南,向东,向西,向上或向下移动一个单元距离 ...

  6. LeetCode----789. 逃脱阻碍者 规律和模拟

    https://leetcode-cn.com/problems/escape-the-ghosts/ 你在进行一个简化版的吃豆人游戏.你从 (0, 0) 点开始出发,你的目的地是 (target[0 ...

  7. D. Solve The Maze(BFS+思维)

    Problem - 1365D - Codeforces 题意: 题意:就是有一个n*m的迷宫,里面有若干个好人(用G表示)以及若干个坏人(用B)表示,还有若干个墙(用#表示),墙的方块不能行走,人只 ...

  8. 【蓝桥杯算法练习题】双指针、BFS与图论

    一.AcWing 1238. 日志统计 [题目描述] 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有NNN行. 其中每一行的格式是: ts id 表示在tstst ...

  9. 2022蓝桥杯学习——6.双指针、BFS和图论

    一.双指针 关于双指针 核心思想就是优化!! 双指针只用一层循环,虽然里面是while,但j只执行了n次,所以ij一共就是2n,时间复杂度就是O(n) , 这种题一般先写出暴力算法,然后看单调性,如果 ...

最新文章

  1. 菜鸟必读 Linux系统的字型设定方法
  2. 走差异化发展路线思想
  3. Kendo UI Validator 概述
  4. 零基础如何学好数据分析?
  5. c#与java之比较(转自Jack.Wang's home)
  6. MySQL 视图的基础操作(五)
  7. 计算机组成材质,计算机组成原理及应用期末复习材料
  8. gmail邮箱 收信服务器,用fetchmail 通过gmail 收邮件
  9. 使用JDK中的 keytool【创建证书】・【查看】・【使用】
  10. 如何把linux生成镜像,如何把当前ubuntu系统做成镜像
  11. 录制方式及一些脚本字段信息
  12. linux卸载文件系统什么意思,Linux文件系统的安装和卸载
  13. HttpClient 发送请求和参数
  14. iPhone12白苹果无法开机,这种情况你有遇到吗?
  15. Windows环境下修改IP的bat文件
  16. library genesis (libgen)及Book系列网站的使用方法,外文图书下载神器,Springer学术书籍免费下载
  17. 【公开课】斯坦福大学:机器学习课程
  18. 配饰 女生的第二件衣服
  19. java+selenium,40行代码完成支付宝账单爬取
  20. 战地4如何修改服务器,战地4如何修改服务器地址

热门文章

  1. 渗透笔记之HackInOS
  2. 经典神经网络论文超详细解读(八)——ResNeXt学习笔记(翻译+精读+代码复现)
  3. 程序员最爱用的8个代码编辑器,你用哪款?
  4. 查询表空间建立表空间和删除表空间
  5. 阿里推出阿里云网盘APP,下载速度远超百度网盘
  6. Android通讯录导入到Iphone
  7. NTFS下的USN日志文件
  8. 关于AD19常用功能和使用技巧的总结
  9. 拼多多店铺怎么布置装修,订单才能暴涨?
  10. 教育界杂志教育界杂志社教育界编辑部2022年第24期目录