1101. 献给阿尔吉侬的花束(bfs找最短路径)

题目:

1101. 献给阿尔吉侬的花束 - AcWing题库

 

 

输入样例:
3
3 4
.S..
###.
..E.
3 4
.S..
.E..
....
3 4
.S..
####
..E.
输出样例:
5
1
oop!

思路:bfs宽搜 

用队列实现bfs。踢出队列头,并在队列尾插入与对头相关的xxx(往往是相邻点)。直至队列为空。这个过程相当于逐行遍历宽度优先搜索树。可以用于求最短路径。 

拓展补充:

BFS(Breadth-First Search,广度优先搜索)是一种图算法,用于遍历或搜索图中的节点。它从图的起始节点开始,逐层地访问其相邻节点,直到找到目标节点或遍历完整个图。

BFS通常使用队列来实现,起始节点首先被放入队列中,然后依次访问其相邻节点,并将这些相邻节点加入队列。接着从队列中取出下一个节点,重复上述过程,直到队列为空为止。

BFS的特点是能够找到起始节点到目标节点的最短路径,因为它先访问离起始节点最近的节点,然后依次向外扩展。这使得BFS在寻找最短路径或最短距离的问题上非常有效。

BFS也可以用于检测图中的环路、连通性、拓扑排序等问题。它是一种简单而且常用的图算法,被广泛应用于计算机科学领域的各种问题中。

代码: 

#include<iostream>
#include<cstdio>
#include<cstring>//memset头文件
#include<queue>
using namespace std;
typedef pair<int, int>PII;
#define x first
#define y second
PII Start, End;//表示起点和终点
const int N = 210;
int m, n;//表示矩阵行列
int dist[N][N];//表示距离起点start的距离(赋初值为-1,可以用于判重)
char p[N][N];//表示矩阵某点坐标int bfs(PII Start, PII End)
{memset(dist, -1, sizeof dist);//设距离起点初始值为-1dist[Start.x][Start.y] = 0;queue<PII>q;//用队列实现宽搜bfsq.push(Start);while (q.size()) {PII t = q.front();//取对列头q.pop();//将对头踢出队列int dx[4] = { -1,1,0,0 }; int dy[4] = { 0,0,-1,1 };for (int i = 0; i < 4; i++) {int x = t.x + dx[i]; int y = t.y + dy[i];//不合规走法if (x < 0 || x >= m || y < 0 || y >= n)continue;//越界if (p[x][y] == '#')continue;//路障if (dist[x][y] != -1)continue;//之前已经遍历过//合规走法dist[x][y] = dist[t.x][t.y] + 1;//在队列头t的基础上走出一步,距离+1q.push({ x,y });//将合规走法的坐标点加入队列尾部if (End == make_pair(x, y))return dist[x][y];}}return -1;//表示走到不能走了都没有找到End,即无法到达
}int main()
{int T;cin >> T;while (T--) {scanf("%d%d", &m, &n);for (int i = 0; i < m; i++)scanf("%s", &p[i]);//按行输入for(int i=0;i<m;i++)for (int j = 0; j < n; j++) {if (p[i][j] == 'S')Start = { i,j };else if (p[i][j] == 'E')End = { i,j };}int distance = bfs(Start, End);if (distance == -1)cout << "oop!" << endl;else cout << distance<<endl;}}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

与JBoss BPM Travel Agency更新了现代BPM数据集成

不久前&#xff0c;我们启动了一个规模较大的JBoss Travel Agency演示项目&#xff0c;以展示JBoss BPM Suite的一些更有趣的功能。 我们提供了一系列视频 &#xff0c;不仅向您展示了如何安装它&#xff0c;项目中各种规则和流程工件的含义&#xff0c;还向您介绍了在实际使用…

codeblock不能调试

问题&#xff1a;codeblock 不能调试&#xff0c;如下图&#xff1a; 解决方法&#xff1a; 首先&#xff0c;项目的保存路径不能是中文路径。 其次&#xff0c;必须创建工程。 最后&#xff0c;build选项里select target选成debug codeblock如何创建工程&#xff1a;http://j…

网络语言不c,哪些网络用语不文明?

满意答案林昨末sk2013.02.26采纳率&#xff1a;47% 等级&#xff1a;11已帮助&#xff1a;8049人Q1. 你认为在网络上出现的不文明用语情况_B___&#xff1f;A.是人们宣泄情绪的一种重要方式 B.是当今社会的一个缩影&#xff0c;没有办法C.不应当提倡&#xff0c;应加大管理力…

谷歌发布最新版安卓Android,谷歌正式除名华为,安卓12华为首发无望,但鸿蒙将迎难顶上!...

原标题&#xff1a;谷歌正式"除名"华为&#xff0c;安卓12华为首发无望&#xff0c;但鸿蒙将迎难顶上&#xff01;前几天谷歌正式发布了新一代的安卓12系统。这也是安卓的第十二个大更新版本&#xff0c;从安卓1.0发布的2008年算起&#xff0c;安卓系统已经走过13个年…

未知的生成错误 因为没有预加载,所以无法解析程序集 GalaSoft.MvvmLight

使用wpf开发时&#xff0c;在ViewModel中引用了DevExpress注册的GalaSoft.MvvmLight命名空间&#xff0c;使用其ViewModelBase&#xff0c;在View界面中绑定事件时出现错误&#xff1a; 错误 13 未知的生成错误“因为没有预加载&#xff0c;所以无法解析程序集“GalaSoft.MvvmL…

android 副mic测试,【收藏】Android Audio Framework CTS Verifier 测试方法

This new suite of tests requires human intervention and some external hardware including a Loopback Plug, a USB reference microphone and external speakers. For devices without 3.5 mm (⅛”) headset port, the user will be able to skip the test and mark it a…

魅蓝android底层是什么,魅蓝E2的手机系统是什么

魅蓝E2的手机系统是什么魅蓝E2的手机系统是Flyme 6系统。魅蓝E2搭载了基于YunOS底层深度定制的Flyme 6系统&#xff0c;相交于Flyme 5系列&#xff0c;Flyme 6拥有更轻巧明快的设计元素&#xff0c;辅以让人称颂的人工智能技术One Mind&#xff0c;可以有效保障魅蓝E2日常使用流…

android夜间模式揭露动画,Android Material Design系列之夜间模式

今天我们讲讲夜间模式的实现&#xff0c;这篇文章的名字应该叫&#xff1a;《Android Material Design系列之夜间模式》。在Android 5.0 之后&#xff0c;实现夜间模式并非很难了&#xff0c;支持的5.0库提供了非常简单的实现方式。不信&#xff0c;你就往下看。首先说&#xf…

jboss drools_JBoss Drools –入门

jboss drools这篇文章是关于我如何掌握JBoss Drools的 。 其背后的原因是&#xff1a;SAP收购了我公司当前的规则引擎&#xff0c;而Drools是我们将寻找的另一种选择&#xff0c;只要有人有能力提高概念验证的能力。 尽管似乎有大量的文档&#xff0c;但是我总是会通过示例来发…

华为荣耀30pro鸿蒙内测版,荣耀手机用户放心了 消息称荣耀30 Pro正在内测华为鸿蒙OS...

2021-5-11 13:12【天极网手机频道】鸿蒙OS2.0手机版目前正在大规模开发者公测阶段&#xff0c;有消息称6月份将开始大规模向华为手机用户推送。而对于不少荣耀手机用户来讲&#xff0c;他们也十分期待体验鸿蒙OS&#xff0c;但荣耀品牌已经与华为品牌分离&#xff0c;这让不少荣…

Docker容器中的WildFly Swarm JAX-RS微服务

这些天&#xff0c;每个人都在谈论微服务。 关于如何在企业级应用这些原则&#xff0c;有很多意见和想法&#xff0c;而很少有示例。 可以肯定的是&#xff0c;即使在几天前的会议上&#xff0c;我也很少发现有人在生产环境中运行Docker容器。 当我问起初次体验以及是否有人玩过…

C#解析json文件的方法

C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript语法标准的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;可以很容易在各种网络、平台和程序之间传输。JSON的语法很简单&#xff0c;易于人阅读和编写&#x…

spring 线程池_Spring线程池服务

spring 线程池线程池对于执行同步和异步过程非常重要。 本文介绍如何使用Spring开发和监视线程池服务。 创建线程池已通过两种替代方法进行了说明。 二手技术 &#xff1a; JDK 1.6.0_21 春天3.0.5 Maven的3.0.2 步骤1&#xff1a;建立已完成的专案 创建一个Maven项目&…

带有骆驼,ActiveMQ,Elasticsearch的HL7关键用例

对于可以说HL7协议格式的系统&#xff0c; HL7 over MLLP是一种非常常见的传输机制。 JBoss Fuse是一个非常强大的微服务样式集成平台&#xff0c;在为关键医疗保健提供者构建灵活&#xff0c;有弹性&#xff0c;高可用性的集成方案方面拥有良好的记录。 此外&#xff0c;在JCA…

android 包裹内容,Android开发中Bundle用法 包裹数据

SDK里是这样描述&#xff1a;A mapping from String values to various Parcelable types。它帮助我将数据打包传入intent里面&#xff0c;为使用这些数据提供了便利。protected void onListItemClick (ListView l, View v, int position, long id){super.onListItemClick(l, v…

安卓高级6 SnackBar

引言 文&#xff0f;李牧羊&#xff08;简书作者&#xff09; 原文链接&#xff1a;http://www.jianshu.com/p/2654e6bda3b1 著作权归作者所有&#xff0c;转载请联系作者获得授权&#xff0c;并标注“简书作者”。 在之前我有提到这一篇Android Design Support Library系列文章…

利用Aspose.Word控件实现Word文档的操作

Aspose系列的控件&#xff0c;功能都挺好&#xff0c;之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出&#xff0c;可以实现多样化的报表设计及输出&#xff0c;由于一般输出的内容比较正规化或者多数是表格居多&#xff0c;所以一般使用Aspose.Cell来实现我想要的各…

html编码自动识别,html实体编码遇上js代码

摘要&#xff1a; 在js中单、双引号引起来的是字符串&#xff0c;如果我们要在字符串中使用单、双引号&#xff0c;需要反斜杠进行转义。而如果字符串出现在html标签中&#xff0c;我们需要做转义处理。单双引号在js代码中在js中单、双引号引起来的是字符串&#xff0c;如果我们…

Activiti中具有单独数据库模式的多租户

我们过去听到的一项功能请求是以多租户方式运行Activiti引擎&#xff0c;使租户的数据与其他租户的数据隔离。 当然&#xff0c;在某些云/ SaaS环境中&#xff0c;这是必须的。 几个月前&#xff0c;波恩大学的学生拉斐尔吉伦&#xff08;Raphael Gielen&#xff09;与我接触&…

html5自动把某个层放在屏幕底部,告诉你一个将 footer 保持在底部的最好方法

当你在布局网页时&#xff0c;有可能会遇到类似下面的这种情况broken_layout.png导致这一问题的原因是页面内容太少&#xff0c;无法将内容区域撑开&#xff0c;从而在 footer 下面留下一大块空白。本文将介绍一种现代化的方法&#xff0c;&#xfffd;确保 footer 始终处于页面…