蓝桥杯—走迷宫(BFS算法)

题目描述

给定一个N×M 的网格迷宫 G。G 的每个格子要么是道路,要么是障碍物(道路用 11表示,障碍物用 0 表示)。

已知迷宫的入口位置为 (x1​,y1​),出口位置为 (x2​,y2​)。问从入口走到出口,最少要走多少个格子。

输入描述

输入第 11 行包含两个正整数 N,M,分别表示迷宫的大小。

接下来输入一个 𝑁×𝑀N×M 的矩阵。若 Gi,j​=1 表示其为道路,否则表示其为障碍物。

最后一行输入四个整数 𝑥1,𝑦1,𝑥2,𝑦2表示入口的位置和出口的位置。

1≤N,M≤102,0≤Gi,j​≤1,1≤x1​,x2​≤N,1≤y1​,y2​≤M。

输出描述

输出仅一行,包含一个整数表示答案。

若无法从入口到出口,则输出 −1;

输入输出样例

示例 1

输入

5 5 
1 0 1 1 0
1 1 0 1 1 
0 1 0 1 1
1 1 1 1 1
1 0 0 0 1
1 1 5 5 

输出

8

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

代码为:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define  x first
#define  y second
using namespace std;
typedef pair<int,int> PII;
const int N=1e2+10;
int n,m;
int x2,y2;//出口的位置
int g[N][N];//存储地图
int dist[N][N];//每个点到起点的距离 
queue<PII> q;//存坐标
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};int bfs(int x1,int y1)
{memset(dist,-1,sizeof dist);//初始都为-1q.push({x1,y1});dist[x1][y1]=0;while(!q.empty()){auto Top=q.front();//取出对头q.pop();//弹出对头for(int i=0;i<4;i++){int a=Top.x+dx[i];int b=Top.y+dy[i];//入口的位置的下一个位置if(a<0||a>n||b<0||b>m) continue;//越界if(g[a][b]!=1) continue;//不是道路if(dist[a][b]>1) continue;q.push({a,b});dist[a][b]=dist[Top.x][Top.y]+1;if(a==x2&&b==y2) return dist[x2][y2];}}return -1;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);int x1,y1;//入口的位置cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)cin>>g[i][j];}cin>>x1>>y1>>x2>>y2;int res=bfs(x1,y1);cout<<res<<'\n';return 0;
}

优化后的代码(运行时间1ms):

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define  x first
#define  y second
using namespace std;
typedef pair<int,int> PII;
const int N=1e2+10;
int n,m;
int x2,y2;//出口的位置
int g[N][N];//存储地图
int dist[N][N];//每个点到起点的距离 
queue<PII> q;//存坐标
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};int bfs(int x1,int y1)
{memset(dist,-1,sizeof dist);//初始都为-1q.push({x1,y1});dist[x1][y1]=0;while(!q.empty()){auto Top=q.front();//取出对头q.pop();//弹出对头for(int i=0;i<4;i++){int a=Top.x+dx[i];int b=Top.y+dy[i];//入口的位置的下一个位置if(a<0||a>n||b<0||b>m) continue;//越界if(g[a][b]!=1) continue;//不是道路if(dist[a][b]>1) continue;q.push({a,b});dist[a][b]=dist[Top.x][Top.y]+1;if(a==x2&&b==y2) return dist[a][b];}}return -1;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);int x1,y1;//入口的位置cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)cin>>g[i][j];}cin>>x1>>y1>>x2>>y2;int res=bfs(x1,y1);cout<<res<<'\n';return 0;
}

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

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

相关文章

【Git】合并冲突

合并冲突 可是&#xff0c;在实际分支合并的时候&#xff0c;并不是想合并就能合并成功的&#xff0c;有时候可能会遇到代码冲突的问题。 为了演示这问题&#xff0c;创建一个新的分支 dev1 &#xff0c;并切换至目标分支&#xff0c;我们可以使用 git checkout -b dev1 一步…

NoSQL数据库系统Cassandra学习笔记

详细文档&#xff1a;我用夸克网盘分享了「noSQL.pdf」&#xff0c;点击链接即可保存。打开「夸克APP」在线查看&#xff0c;支持多种文档格式转换。 链接&#xff1a;https://pan.quark.cn/s/dfc3864807b4 参考链接&#xff1a;黑马程序员NoSQL数据库系统Cassandra全套教程&a…

解锁DeepSpeek-R1大模型微调:从训练到部署,打造定制化AI会话系统

目录 1. 前言 2.大模型微调概念简述 2.1. 按学习范式分类 2.2. 按参数更新范围分类 2.3. 大模型微调框架简介 3. DeepSpeek R1大模型微调实战 3.1.LLaMA-Factory基础环境安装 3.1大模型下载 3.2. 大模型训练 3.3. 大模型部署 3.4. 微调大模型融合基于SpirngBootVue2…

考研408

是否需要考研&#xff1f; 考研前期准备 目标院校 每年9月10月才会公布 考试时长3小时 数据结构 1.时间复杂度选择题计算 2.顺序表链表特点;指针、结构体语法&#xff0c;链表结点定义&#xff0c;链表头结点与头指针,常见的五种链 表&#xff0c;链表的插入删除操作;顺…

SpringCloud系列教程(十三):Sentinel流量控制

SpringCloud中的注册、发现、网关、服务调用都已经完成了&#xff0c;现在就剩下最后一部分&#xff0c;就是关于网络控制。SpringCloud Alibaba这一套中间件做的非常好&#xff0c;把平时常用的功能都集成进来了&#xff0c;而且非常简单高效。我们下一步就完成最后一块拼图Se…

Element Plus中的树组件的具体用法(持续更新!)

const defaultProps {//子树为节点对象的childrenchildren: children,//节点标签为节点对象的name属性label: name, } 属性 以下是树组件中的常用属性以及作用&#xff1a; data&#xff1a;展示的数据&#xff08;数据源&#xff09; show-checkbox&#xff1a;节点是否可…

计算机二级MS之PPT

声明&#xff1a;跟着大猫和小黑学习随便记下一些笔记供大家参考&#xff0c;二级考试之前将持续更新&#xff0c;希望大家二级都能轻轻松松过啦&#xff0c;过了二级的大神也可以在评论区留言给点建议&#xff0c;感谢大家&#xff01;&#xff01; 文章目录 考题难点1cm25px…

TypeError: Cannot convert object to primitive value

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

虚拟机 | Ubuntu图形化系统: open-vm-tools安装失败以及实现文件拖放

系列文章目录 虚拟机 | Ubuntu 安装流程以及界面太小问题解决 文章目录 系列文章目录虚拟机 | Ubuntu 安装流程以及界面太小问题解决 前言一、VMware Tools 和 open-vm-tools 是什么1、VMware Tools2、open-vm-tools 二、推荐使用open-vm-tools&#xff08;简单&#xff09;1、…

2025最新群智能优化算法:山羊优化算法(Goat Optimization Algorithm, GOA)求解23个经典函数测试集,MATLAB

一、山羊优化算法 山羊优化算法&#xff08;Goat Optimization Algorithm, GOA&#xff09;是2025年提出的一种新型生物启发式元启发式算法&#xff0c;灵感来源于山羊在恶劣和资源有限环境中的适应性行为。该算法旨在通过模拟山羊的觅食策略、移动模式和躲避寄生虫的能力&…

在【k8s】中部署Jenkins的实践指南

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Jenkins简介 2、k8s简介 3、什么在…

供应链重构:制造业如何借助数字化提升响应速度?

下面这篇文章旨在从宏观和微观层面探讨:在过去五年(约2020-2024年)中,制造业如何通过数字化(尤其是人工智能、物联网、大数据等技术)重构供应链,以显著提升对市场与客户需求的响应速度。本文将包含相对详实的行业数据、部分技术原理解析、以及具有代表性的案例分析,帮助…

爬虫案例十js逆向合肥滨湖会展中心网

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、网站分析二、代码总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 爬虫案例十js逆向合肥滨湖会展中心网 提示&#xff1a;以下…

景联文科技:以精准数据标注赋能AI进化,构筑智能时代数据基石

在人工智能技术席卷全球的浪潮中&#xff0c;高质量数据已成为驱动AI模型进化的核心燃料。作为全球领先的AI数据服务解决方案提供商&#xff0c;景联文科技深耕数据标注领域多年&#xff0c;以技术为基、以专业为本&#xff0c;致力于为全球客户提供全场景、高精度、多模态的数…

esp32s3聊天机器人(二)

继续上文&#xff0c;硬件软件准备齐全&#xff0c;介绍一下主要用到的库 sherpa-onnx 开源的&#xff0c;语音转文本、文本转语音、说话人分类和 VAD&#xff0c;关键是支持C#开发 OllamaSharp 用于连接ollama&#xff0c;如其名C#开发 虽然离可玩还有一段距离&#xff0…

aws(学习笔记第三十二课) 深入使用cdk(API Gateway + event bridge)

文章目录 aws(学习笔记第三十二课) 深入使用cdk学习内容&#xff1a;1. 使用aws API Gatewaylambda1.1. 以前的练习1.2. 使用cdk创建API Gateway lambda1.3. 确认cdk创建API Gateway lambda 2. 使用event bridge练习producer和consumer2.1. 代码链接2.2. 开始练习2.3. 代码部…

初识大模型——大语言模型 LLMBook 学习(一)

1. 大模型发展历程 &#x1f539; 1. 早期阶段&#xff08;1950s - 1990s&#xff09;&#xff1a;基于规则和统计的方法 代表技术&#xff1a; 1950s-1960s&#xff1a;规则驱动的语言处理 早期的 NLP 主要依赖 基于规则的系统&#xff0c;如 Noam Chomsky 提出的 生成语法&…

实现静态网络爬虫(入门篇)

一、了解基本概念以及信息 1.什么是爬虫 爬虫是一段自动抓取互联网信息的程序&#xff0c;可以从一个URL出发&#xff0c;访问它所关联的URL&#xff0c;提取我们所需要的数据。也就是说爬虫是自动访问互联网并提取数据的程序。 它可以将互联网上的数据为我所用&#xff0c;…

Net8 Spire最新版去水印,去页数限制,转word/pptx/ofd等

新建控制台程序&#xff0c;添加Spire.pdf&#xff0c;最新版本为2024年7月17日 下载连接&#xff1a; Net8 Spire最新版去水印&#xff0c;去页数限制,转word/pptx/ofd等 https://download.csdn.net/download/LongtengGensSupreme/90459916 把下载的Spire.Pdf.dll类库版本 …

MyBatis增删改查:静态与动态SQL语句拼接及SQL注入问题解析

MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。本文将深入探讨 MyBatis 中的增删改查操作&#xff0c;重点讲解静态与动态 SQL 语句的拼接&#xff0c;并分析 S…