每日OJ_牛客_走迷宫(简单bfs)

news2024/11/11 23:09:09

目录

牛客_走迷宫(简单bfs)

解析代码:


牛客_走迷宫(简单bfs)

走迷宫__牛客网


解析代码:

  • 采用一个二维数组,不断的接受迷宫地图(因为有多个地图),获取到迷宫地图后,采用广度优先方式走迷宫,找到的第一条路径一定是最短的路径,但是深度优先则不一定。
  • 结构设定: pos:x,y表示当前所在位置。level所经过步数。dir: 表示当前位置的上、下、左、右四个方向。queue: 广度优先遍历,需要用到队列,保存所经路径。visit:对走过的路径进行标记。start和end表示入口和出口
  • 采用广度优先方式走迷宫:将start入队列,对该位置进行标记,只要队列不为空,继续以下步骤,直到到达出口:从队列中取出当前位置cur,计算该位置的上、下、坐、右四个方向,计算要走的下一步如果next在出口的位置,已经找到返回所走步数level 否则:如果该位置有效(坐标在地图中)不是墙(该位置字符为'.'),并且没有走过(visit标记为false)时,将该位置入队列,再继续其他几个方向
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int dx[4] = {0, 0, -1, 1};
int dy[4] = {1, -1, 0, 0};

int nearestExit(vector<string>& maze)
{
    int m = maze.size(), n = maze[0].size(), ret = 0;
    vector<vector<bool>> vis(m, vector<bool>(n, false));
    queue<vector<int>> q; // 存下标的队列
    q.push({0, 1}); // 入口入队
    vis[0][1] = true;
    while(!q.empty())
    {
        ++ret; // 一层加一次步数
        int size = q.size();
        for(int i = 0; i < size; ++i) // 访问当前层
        {
            vector<int> tmp = q.front();
            q.pop();
            for(int j = 0; j < 4; ++j)
            {
                int x = tmp[0] + dx[j], y = tmp[1] + dy[j];
                if(x >= 0 && x < m && y >= 0 && y < n 
                    && maze[x][y] == '.' && !vis[x][y])
                {
                    if(x == 9 && y == 8)
                        return ret; // 是出口就返回
                    q.push({x, y});
                    vis[x][y] = true;
                }
            }
        }
    }
    return -1;
}

int main()
{
	vector<string> map(10); // 地图
	int i = 0;
	while (cin >> map[i++])
	{
		if (10 == i)
		{
			// 已经将地图中的数据接收完成
			cout << nearestExit(map) << endl;
			i = 0;
		}
	}
	return 0;
}

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

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

相关文章

智能匹配新高度:相亲交友系统如何运用AI技术提升用户体验

在数字化时代&#xff0c;相亲交友系统正逐渐融入人工智能&#xff08;AI&#xff09;技术&#xff0c;以提升用户体验和匹配效率。AI的引入不仅改变了传统的交友方式&#xff0c;还为用户带来了更加个性化和精准的交友体验。以下是一篇关于如何运用AI技术提升相亲交友系统用户…

第L8周:机器学习|K-means聚类算法

本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 &#x1f680; 文章来源&#xff1a;K同学的学习圈子深度学习 聚类算法的定义&#xff1a; 聚类就是将一个庞杂数据集中具有相似特征的数据自动归类到一…

YOLOV5入门教学-common.py文件

在 YOLOv5 框架中&#xff0c;common.py 文件是一个核心组件&#xff0c;负责定义深度学习模型的基础模块和常用操作。无论是卷积层、激活函数、特征融合还是其他复杂的模型结构&#xff0c;common.py 都提供了灵活且高效的实现。在这篇文章中&#xff0c;我们将深入解析 commo…

【科普知识】一体化电机掉电后“位置精准复位“机制与规律

在工业自动化、机器人技术及精密控制领域&#xff0c;电机作为核心执行元件&#xff0c;其稳定运行和精确控制对于整个系统的性能至关重要。 然而&#xff0c;电机在运行过程中可能会遭遇突然断电的情况&#xff0c;这会导致电机失去驱动力并停止在当前位置&#xff0c;甚至在…

基于YOLOv10的垃圾检测系统

基于YOLOv10的垃圾检测系统 (价格90) 包含 [CardBoard, Glass, Metal, Paper, Plastic] 5个类 [纸板, 玻璃, 金属, 纸张, 塑料] 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数据训练出的…

Minimax-秋招正式批-面经(计网)

6. websocket和http区别 websocket知识点总结_防火墙 websocket-CSDN博客 相同点 都是基于TCP协议&#xff0c;都是可靠性传输协议都是应用层协议 不同点 HTTP 类型&#xff1a; 请求-响应式的无状态协议&#xff0c;半双工通信&#xff0c;同一时刻只能一个方向上有动作通…

变阻箱和负载箱的区别

变阻箱和负载箱是两种常见的电力设备&#xff0c;它们在电力系统中起着重要的作用。虽然它们都是用来调节电流的&#xff0c;但是它们的工作原理和用途有很大的区别。 首先&#xff0c;我们来看看变阻箱。变阻箱是一种可以改变电阻值的设备&#xff0c;它的主要作用是调节电流…

el-table使用type=“expand”根据数据条件隐藏展开按钮

一&#xff1a;添加className <el-table :data"tableData" border :loading"loading" :row-class-name"getRowClass" expand-change"expandchange"><el-table-column type"expand"><template #default"…

基于51单片机的智能小车转向控制系统设计与实现

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对…

PCB散热设计

随着电子设备性能的不断提升&#xff0c;电路板上的元器件集成度越来越高&#xff0c;发热量也随之增加。如何有效管理这些热量&#xff0c;保证电路板在高温环境下的稳定运行&#xff0c;成为设计过程中一个不可忽视的问题。如果散热不佳&#xff0c;电子元件可能会因过热导致…

python3删除es 45天前索引,生产环境验证过

本人es版本 环境 pip install --upgrade elasticsearch==7.16.3代码 from datetime import datetime, timedelta from elasticsearch import Elasticsearch

通过15张图带你掌握网络抓包工具Wireshark必备使用技巧

学习TCP/IP等网络协议时异常枯燥&#xff0c;因为网络问题看不见摸不着&#xff0c;很难深入理解其工作原理&#xff0c;而Wireshark正是将这些知识以一种网络数据包、可视化的形式呈现给大家&#xff0c;接下来博主带大家掌握Wireshark的必备技能&#xff01;如有任何疑问&…

【GPT】Coze使用开放平台接口-【5】API 调用

我们在机器人里面引用工作流&#xff0c;当然也可以通过 API 直接调用工作流&#xff0c;coze 也提供了这一套的 API 接口。coze 的 API 接口肯定也不只是接入工作流&#xff0c;Bots&#xff0c;文件&#xff0c;知识库等&#xff0c;都有相关接口。这个文档我们也只专注在工作…

IntelliJ IDEA 中实现 Spring Boot 项目 的自动编译

要在 IntelliJ IDEA 中实现 Spring Boot 项目的自动编译&#xff0c;可以通过以下步骤进行设置&#xff1a; 1.添加 Spring Boot DevTools 依赖 在项目 pom.xml文件中添加Spring Boot DevTools依赖。这个依赖提供了自动编译和热更新的功能。依赖的配置如下&#xff1a; <d…

Word快速重复上一步操作的三种高效方法

在日常工作、学习和生活中&#xff0c;我们经常需要执行一系列重复性的操作。这些操作可能简单如复制粘贴、调整图片大小&#xff0c;也可能复杂如编辑文档、处理数据等。为了提高效率&#xff0c;掌握快速重复上一步操作的方法显得尤为重要。本文将介绍三种高效的方法&#xf…

【扩散模型(十)】IP-Adapter 源码详解 4 - 训练细节、具体训了哪些层?

系列文章目录 【扩散模型&#xff08;一&#xff09;】中介绍了 Stable Diffusion 可以被理解为重建分支&#xff08;reconstruction branch&#xff09;和条件分支&#xff08;condition branch&#xff09;【扩散模型&#xff08;二&#xff09;】IP-Adapter 从条件分支的视…

论文阅读 - Coordinated Activity Modulates the Behavior and Emotions ofOrganic Users

协调活动调节有机用户的行为和情绪&#xff1a;有关加沙冲突的推文案例研究 https://dl.acm.org/doi/pdf/10.1145/3589335.3651483 目录 摘要 1 INTRODUCTION 2 DATA 3 METHODOLOGY 3.1 Coordinated Activity Detection 3.3 用户互动动态特征 3.4 Organic Users’ Behav…

系统架构师考试学习笔记第三篇——架构设计高级知识(17)云原生架构设计理论与实践

本章知识考点&#xff1a; 第17课时主要学习云原生架构设计理论与实践。根据考试大纲&#xff0c;本课时知识点会涉及单选题型&#xff08;约占2~4分&#xff09;、案例题&#xff08;25分&#xff09;和论文题&#xff0c;本课时节内容偏重于方法掌握和应用&#xff0c;根据以…

KEIL中编译51程序 算法计算异常的疑问

KEIL开发 51 单片机程序 算法处理过程中遇到的问题 ...... by 矜辰所致前言 因为产品的更新换代&#xff0c; 把所有温湿度传感器都换成 SHT40 &#xff0c;替换以前的 SHT21。在 STM32 系列产品上的替换都正常&#xff0c;但是在一块 51 内核的无线产品上面&#xff0c;数据…

两个月冲刺软考——逻辑地址与物理地址的转换(例题+讲解);文件类型的考点

1.已知计算机系统页面大小和进程的逻辑地址&#xff0c;根据页面变换表(页号-物理块号)&#xff0c;求变换后的物理地址。 首先介绍几个公式&#xff1a; 逻辑地址 页号 页内地址 (默认为32机位) 物理地址 物理块号 物理地址的页内地址 其中&#xff1a;页内地址 物理地址…