蓝桥杯—走迷宫(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);//初始都为-1
  q.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);//初始都为-1
  q.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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu无风扇工控机:解决精密仪器散热难题的利器

在现代工业自动化领域&#xff0c;精密仪器的控制对设备的稳定性、可靠性和静音性提出了极高的要求。而无风扇Ubuntu工控机&#xff0c;凭借其独特的无风扇设计和强大的计算能力&#xff0c;正逐渐成为精密仪器控制场景中的“无声守护者”。本文将深入探讨无风扇工控机在精密仪…

TCP协议与包头格式

patience is key in life&#xff01;&#xff01;&#xff01; 文章目录 一、什么是TCP&#xff1f;二、TCP的特点三、TCP为什么可靠&#xff1f;四、TCP的包头格式五、TCP的三次握手与四次挥手1.三次握手2.四次挥手 一、什么是TCP&#xff1f; TCP&#xff08;Transmission …

LeetCode Hot100刷题——反转链表(迭代+递归)

206.反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#…

【Linux】http 协议

目录 一、http协议 &#xff08;一&#xff09;http 协议的概念 &#xff08;二&#xff09;URL的组成 &#xff08;三&#xff09;urlencode 和 urldecode 二、http 的协议格式 &#xff08;一&#xff09;http 请求方法 &#xff08;二&#xff09;http 响应状态码 &a…

ACE协议学习1

在多核系统或复杂SoC&#xff08;System on Chip&#xff09;中&#xff0c;不同处理器核心或IP&#xff08;Intellectual Property&#xff09;模块之间需要保持数据的一致性。常用的是ACE协议or CHI。 先对ACE协议进行学习 ACE协议&#xff08;Advanced Microcontroller Bu…

ES-分词器安装与使用详解

安装分词器 windows环境&#xff0c;分词器有2种安装方式&#xff0c;1.直接命令安装&#xff1b;2.压缩包安装 IK分词器 查看ik分词器文档&#xff0c;找到安装方式介绍 文档链接&#xff1a; 方式1 elasticsearch-plugin install https://get.infini.cloud/elasticsearch/an…

FY-3D MWRI亮温绘制

1、FY-3D MWRI介绍 风云三号气象卫星&#xff08;FY-3&#xff09;是我国自行研制的第二代极轨气象卫星&#xff0c;其有效载荷覆 盖了紫外、可见光、红外、微波等频段&#xff0c;其目标是实现全球全天候、多光谱、三维定量 探测&#xff0c;为中期数值天气预报提供卫星观测数…

P8686 [蓝桥杯 2019 省 A] 修改数组--并查集 or Set--lower_bound()的解法!!!

P8686 [蓝桥杯 2019 省 A] 修改数组--并查集 题目 并查集解析代码【并查集解】 Set 解法解析lower_bound代码 题目 并查集解析 首先先让所有的f&#xff08;i&#xff09;i&#xff0c;即每个人最开始的祖先都是自己&#xff0c;然后就每一次都让轮到那个数的父亲1&#xff08…

docker启动jenkins,jenkins中调用docker

在jenkins中执行docker 思路 jenkins中安装docker客户端&#xff0c;使用第三方的docker(需要付费)。jenkins中安装docker客户端&#xff0c;另一个容器中安装docker服务&#xff0c; docker-in-docker&#xff0c;需要特权模式&#xff0c;或者第三方的工具。jenkins中什么都…

【GPT入门】第9课 思维树概念与原理

【GPT入门】第9课 思维树概念与原理 1.思维树概念与原理2. 算24游戏的方法 1.思维树概念与原理 思维树&#xff08;Tree of Thought&#xff0c;ToT &#xff09;是一种大模型推理框架&#xff0c;旨在解决更加复杂的多步骤推理任务&#xff0c;让大模型能够探索多种可能的解决…

时态--02--⼀般将来时

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 ⼀般将来时1.肯定句结构:主am/is/aregoing to do(v.原型) 2.否定句结构:主am/is/arenotgoing to do(v.原型) 3.一般疑问句结构:Am/Is/Are(提句⾸)主going to do (v.…

模型压缩技术(二),模型量化让模型“轻装上阵”

一、技术应用背景 在人工智能蓬勃发展的浪潮下&#xff0c;大模型在自然语言处理、计算机视觉等诸多领域大放异彩&#xff0c;像知名的GPT以及各类开源大语言模型&#xff0c;其规模与复杂度持续攀升。然而&#xff0c;这一发展也带来了挑战&#xff0c;模型越大&#xff0c;对…

swift-5-汇编分析闭包本质

一、枚举、结构体、类都定义方法 方法占用对象的内存么&#xff1f; 不占用 方法的本质就是函数 方法、函数都存放在代码段&#xff0c;因为方法都是公共的&#xff0c;不管 对象一还是对对象二调用都是一样的&#xff0c;所以放在代码段&#xff0c;但是每个对象的成员不一样所…

通义千问本地配置并实现微调

通义千问本地配置并实现微调 最小Qwen模型大小942mb from modelscope import snapshot_download model_dir = snapshot_download(“qwen/Qwen2.5-0.5B”, cache_dir=“./models2.5”) Qwen2.5-0.5B:942MB from modelscope import snapshot_download model_dir = snapshot_d…

< 自用文儿 > CertBot 申请 SSL 证书 使用 challenge 模式 避开防火墙的阻挡

环境&#xff1a; 腾讯 VPS 腾讯会向你销售 SSL &#xff0c; 这个本是免费的。CertBot 默认申请证书要用到 80 端口&#xff0c;会蹭边什么什么条款&#xff0c;备案法律来阻止80端口的通讯&#xff0c;没有网站也一样被阻拦。 通过腾讯买的域名&#xff1a; bestherbs.cn …

<建模软件安装教程1>Blender4.2系列

Blender4.2安装教程 0注意&#xff1a;Windows环境下安装 第一步&#xff0c;百度网盘提取安装包。百度网盘链接&#xff1a;通过网盘分享的文件&#xff1a;blender.zip 链接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取码: 0309 --来自百度网盘超级会员v3的分…

SpringBoot统一响应类型3.1.1版本

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…

如是APP:AI精准匹配需求,信用体系重构信任,双轮驱动打造无套路电商

如是APP:AI精准匹配需求,信用体系重构信任,双轮驱动打造无套路电商 2024年3月,一款结合AI导购与信用体系的电商平台——如是APP即将上线。如是APP通过AI对话帮助用户精准快速购物,并通过全维度信用体系实现产品信息透明化,旨在打造一个“信息对称”的电商平台,实现“无套路”的…

[SAP MM] 查看物料主数据的物料类型

创建物料主数据时&#xff0c;必须为物料分配物料类型&#xff0c;如原材料或半成品 在标准系统中&#xff0c;物料类型ROH(原材料)的所有物料都要从外部采购&#xff0c;而类型为NLAG(非库存物料)的物料则可从外部采购也可在内部生产 ① 特殊物料类型&#xff1a;NLAG 该物料…

Linux中部署DeepSeek,WSL(ubunt)中使用ollama部署deepseek-R1-7b

想在自己的Win11电脑上部署Linux的DeepSeek模型&#xff0c;但在网上一直没有找到合适的相应教程&#xff0c;自己查询各种网上资源&#xff0c;以及询问一些AI大模型后成功安装&#xff0c;并整理了以下步骤。仅作为个人学习笔记使用&#xff0c;由于本人对各方面知识掌握不足…