P1128-绝地求生

传送门

题目描述:

小H所在的地方有毒气扩散,现在他必须赶去安全区。
他所在的地方可以用一个N∗M的地图表示。.表示空地,人和毒气都可以经过*表示毒气的地方(可能有多个地方有毒气)X表示障碍物,两者均不能经过S表示小H初始的位置D表示安全区(注意:安全区不会被毒气入侵)
小H每分钟可以往上下左右四个相邻位置移动,同时毒气也会从已有毒气的区域扩散到相邻的区域。
小H想知道到达安全区的最少时间,如果不能到达安全区,他将呼叫他的队友“HELP”。

输入格式:

输入第一行有两个数字分别为N和M
接下来输入N行,每行M个字符,表示小H所在区域的地图
输入保证S,D只出现一次。
1≤N,M≤50

输出格式:

如果可以到达安全区,输出一个整数,表示到达安全区的最少时间。
如果到达不了输出"HELP"(不含引号)

输入样例:

3 6
D...*.
.X.X..
....S.

输出格式:

6

思路:题目中说明毒圈位置不止一个,所以本题明显是一道多源bfs的题,故记录时间,在每分钟小H可以到达的地点入队之后,然后将这一分钟有那些毒圈可以向四周扩散,并将扩散的点入队(并且将入对的点时间+1),按照这个思路就可以解决本题。

菜鸟代码:

#include<bits/stdc++.h>
using namespace std;
const int N=55;
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
struct bs
{int x,y,s;     //(x,y)是位置,s代表时间
}t;
queue<bs>q,p; //定义两个队列,q用于存放小H路径,p用于存放毒圈扩散路径
int n,m,ans;
char ma[N][N];      //存放地图
bool vis[N][N],flag;    //vis作为标记数组
void bfss(int x);void bfs()     //广搜判断小H能否到达安全区
{while(!q.empty()){t=q.front();q.pop();if(ma[t.x][t.y]=='D')   //成功到达安全区{flag=true;       //将标记改为true,证明可以成功到达安全区ans=t.s;return;}for(int i=0;i<4;i++)   //对四个方向进行遍历{int tx=t.x+dx[i];int ty=t.y+dy[i];if(tx<0||ty<0||tx>=n||ty>=m||vis[tx][ty])   //判断小H能否过去continue;if(ma[tx][ty]=='.'||ma[tx][ty]=='D'){vis[tx][ty]=true;q.push({tx,ty,t.s+1});   //将下一步位置入队,时间+1分钟}}bfss(t.s);       //毒圈进行扩散,注意只能是本分钟毒圈才可以扩散}
}void bfss(int x)       //对每分钟毒圈位置向四周扩散的点进行广搜入队
{while(!p.empty()){bs t1=p.front();if(t1.s>x) return;       //不要忽略,每分钟可以扩散的毒圈入队,由本分钟毒圈入队的点在本分钟不能扩散,需要到下一分钟才可以扩散p.pop();for(int i=0;i<4;i++){int tx=t1.x+dx[i];int ty=t1.y+dy[i];if(tx<0||ty<0||tx>=n||ty>=m)   //判断是否在地图以内continue;if(ma[tx][ty]=='.'&&!vis[tx][ty])   //{vis[tx][ty]=true;ma[tx][ty]='*';     //将扩散的地点标记为毒圈p.push({tx,ty,t1.s+1});       //入队,下一次毒圈扩散的时间在本分钟上加1}}}
}int main()
{cin>>n>>m;     for(int i=0;i<n;i++){scanf("%s",&ma[i]);for(int j=0;j<m;j++){if(ma[i][j]=='S')    //将小H初始点入队q.push({i,j,0});if(ma[i][j]=='*')     //将初始地图中的毒圈点全部入队便于后面扩散p.push({i,j,0});}}bfs();if(flag) cout<<ans<<endl;else cout<<"HELP"<<endl;    return 0;
}

New Online Judge P1128-绝地求生(多源bfs)相关推荐

  1. 用Python写了个绝地求生(附源码)

    作者:LookOutTheBush https://juejin.cn/post/7232253274056785957 仅做学习交流,非盈利 一.概述 1.1 效果 总的来说,这种方式是通过图像识别 ...

  2. obs媒体源没有声音_绝地求生的推荐直播参数和获取方法 在阅读本教程之前,请提前下载好斗鱼伴侣或者OBS直播软件,如还未下载,可进入...

    在阅读本教程之前,请提前下载好斗鱼伴侣或者OBS直播软件,如还未下载,可进入https://www.douyu.com/client?platform=1下载斗鱼直播管家,内置斗鱼伴侣和OBS两款直播 ...

  3. 绝地求生pubg物理压枪芯片源码+成品

    绝地求生物理压枪芯片源码+成品 本次开源的软件遵照GPL协议开放源代码 源码地址:https://github.com/cdians/youyiPUBG release下有打包好的成品 前言 某宝上吹 ...

  4. 《绝地求生》外挂源码被公布后,腾讯蓝洞再次出招打压!

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 但理想很丰满,现实却骨感. 从风靡小学生的<王者荣耀>到全民吃鸡的<绝地求 ...

  5. 绝地求生服务器延迟检测源码,绝地求生不停网络延迟检测怎么办 绝地求生网络问题解决办法...

    每个游戏玩家在游戏中都会遇到延迟卡顿的现象,最近许多朋友在玩绝地求生的时候出现一直网络延迟检测,这是怎么回事呢?下面小编介绍一下解决的办法,让你们畅快的吃鸡. 1.首先设置游戏的启动项:-USEALL ...

  6. html 吃鸡游戏 源码,刺激战场 虚幻4引擎的和平精英来了 你会选择玩吗?-绝地求生辅助...

    今天相信很多刺激战场的玩家都比较大.早上上线的时候发现,战场其实已经不服务了.如果你不关心新闻,你一定很困惑. 但是如果你喜欢刷新闻,你就知道腾讯拿到了国内版本号<和平精英>.刚拿到版本号 ...

  7. 贾跃亭自觉“无辜”;《绝地求生》外挂案件逮捕 34 人;VS Code 1.29 发布! | 极客头条...

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 贾 ...

  8. 区块链版《绝地求生》游戏—Blast Royale攻略

    1.基本情况 1.1项目简介 1.2基本信息 2.项目详情 2.1团队 2.2资金 2.3产品 3.项目发展 3.1Roadmap 3.2现状 4. 经济模型 4.1代币分配 5.竞品分析 6.项目风 ...

  9. 关于绝地求生游戏白名单画中画逆向分析

    关于绝地求生某辅助白名单画中画逆向分析<二> 拖了好久,最近在忙着找工作,延误给大家分享心得的时间,好了废话不多讲步入正题. 猜测该外挂用的是steam协议了.那怎么来确定他是否用的是st ...

最新文章

  1. win8 网络 连接计算机名称,win8本地网络联接的名字怎么改
  2. U3D MonoBehaviour
  3. Linux centos7 配置java环境变量
  4. python pathname_Python模块的定义,模块的导入,__name__用法实例分析
  5. 导入mysql source_mysql导入source数据库
  6. 你最近学到的 飞鸽传书 东西的题目
  7. Ethercat解析(二)之获取、编译、安装(debian7)
  8. 解决Windows Server 2008 System4进程占用80端口 net stop http
  9. Google Protocol Buffer
  10. 新版本NexT 调动态背景、调canvas_nest的解决方案
  11. flash与js交互
  12. 在NodeJS中使用Redis缓存数据
  13. 远程桌面中断解决技巧
  14. unreal 安卓打包出现 LogHttp: Warning: 000001D09B0C8F00: request failed, libcurl error 哇塞 真的是爆炸 不知道为啥巨慢
  15. linux远程桌面太卡,确保远程桌面管理顺畅稳定的方法
  16. 安卓微博登录第三方详解
  17. 网站加速的几种常用方法
  18. java发微信_java实现微信发送消息
  19. linux 下文件防篡改,Rsync+inotify实现文件防篡改
  20. Android 蓝牙自动打开并扫描设备,以及获取对方蓝牙设备的种类

热门文章

  1. overflow and underflow
  2. 类型的Overflow与underflow
  3. 00、老徐教你学C语言——C语言学习之道(学习篇)——理论
  4. 双开乃至多开电脑微信的简单方法
  5. linux内核网络收包过程—硬中断与软中断
  6. 再见,安卓开发权威指南
  7. 高一数学试题-2022年秋期末试卷
  8. office常用技巧总结【word篇】
  9. java 计算九宫格_Java计算手机九宫格锁屏图案连接9个点的方案总数
  10. html img路径 404,webpack css背景图片无法现实,图片路径404