LeetCode 1926. 迷宫中离入口最近的出口(BFS)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 '.' 表示)和(用 '+' 表示)。
同时给你迷宫的入口 entrance ,用 entrance = [entrancerow, entrancecol] 表示你一开始所在格子的行和列。

每一步操作,你可以往 上,下,左 或者 右 移动一个格子。
你不能进入墙所在的格子,你也不能离开迷宫。
你的目标是找到离 entrance 最近 的出口
出口 的含义是 maze 边界 上的 空格子。entrance 格子 不算 出口。

请你返回从 entrance 到最近出口的最短路径的 步数 ,如果不存在这样的路径,请你返回 -1 。

示例 1:
在这里插入图片描述

输入:maze =  [["+","+",".","+"],[".",".",".","+"],["+","+","+","."]], entrance = [1,2]
输出:1
解释:总共有 3 个出口,分别位于 (1,0)(0,2)(2,3) 。
一开始,你在入口格子 (1,2) 处。
- 你可以往左移动 2 步到达 (1,0)- 你可以往上移动 1 步到达 (0,2) 。
从入口处没法到达 (2,3) 。
所以,最近的出口是 (0,2) ,距离为 1 步。

示例 2:
在这里插入图片描述

输入:maze = [["+","+","+"],[".",".","."],["+","+","+"]], entrance = [1,0]
输出:2
解释:迷宫中只有 1 个出口,在 (1,2) 处。
(1,0) 不算出口,因为它是入口格子。
初始时,你在入口与格子 (1,0) 处。
- 你可以往右移动 2 步到达 (1,2) 处。
所以,最近的出口为 (1,2) ,距离为 2 步。

示例 3:
在这里插入图片描述

输入:maze = [[".","+"]], entrance = [0,0]
输出:-1
解释:这个迷宫中没有出口。提示:
maze.length == m
maze[i].length == n
1 <= m, n <= 100
maze[i][j] 要么是 '.' ,要么是 '+' 。
entrance.length == 2
0 <= entrancerow < m
0 <= entrancecol < n
entrance 一定是空格子。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/nearest-exit-from-entrance-in-maze
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 标准的 广度优先搜索 模板题
class Solution {
public:int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {int m = maze.size(), n = maze[0].size(), step = 0;typedef pair<int,int> pii;queue<pii> q;q.push({entrance[0], entrance[1]});maze[entrance[0]][entrance[1]] = '+'; // 访问过了vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};while(!q.empty()){int size = q.size();step++;while(size--){   int x = q.front().first;int y = q.front().second;q.pop();for(int k = 0; k < 4; ++k){int nx = x + dir[k][0];int ny = y + dir[k][1];if(nx>=0 && nx<m && ny>=0 && ny<n && maze[nx][ny]!='+') //不为墙{if(nx==0 || nx==m-1 || ny==0 || ny==n-1)return step; // 到达边界出口maze[nx][ny] = '+'; // 标记为走过了q.push({nx, ny});}}}}return -1;}
};

100 ms 29.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

LeetCode 1930. 长度为 3 的不同回文子序列(计数)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s &#xff0c;返回 s 中 长度为 3 的不同回文子序列 的个数。 即便存在多种方法来构建相同的子序列&#xff0c;但相同的子序列只计数一次。 回文 是正着读和反着读一样的字符串。 子序列 是由原字符串删除其中部分字符&…

修改telnet的用户名密码_远程管理设备telnet的N种设置方法

作为一名网络工程师&#xff0c;日常管理和配置设备&#xff0c;可以选择的方法有很多&#xff0c;很多(如下图)&#xff0c;但是最常用的配置手段&#xff0c;任然是本地使用console口&#xff0c;远程使用telnet(或SSH)&#xff0c;本文以思科设备演示几种telnet的设置方法&a…

LeetCode 1935. 可以输入的最大单词数

文章目录1. 题目2. 解题1. 题目 键盘出现了一些故障&#xff0c;有些字母键无法正常工作。 而键盘上所有其他键都能够正常工作。 给你一个由若干单词组成的字符串 text &#xff0c;单词间由单个空格组成&#xff08;不含前导和尾随空格&#xff09;&#xff1b; 另有一个字符…

LeetCode 1936. 新增的最少台阶数

文章目录1. 题目2. 解题1. 题目 给你一个 严格递增 的整数数组 rungs &#xff0c;用于表示梯子上每一台阶的 高度 。 当前你正站在高度为 0 的地板上&#xff0c;并打算爬到最后一个台阶。 另给你一个整数 dist 。 每次移动中&#xff0c;你可以到达下一个距离你当前位置&am…

mysql事务与jdbc事务_事务(mysql事务、jdbc事务)

一、MYSQL事务1、事务概念&#xff1a;事务是一个用户定义的数据库操作序列&#xff0c;这些操作要么全做要么全不做&#xff0c;是一个不可分割的工作单位。事务可以是一条sql语句&#xff0c;一组sqi语句或者整个程序。特性(ACDI)&#xff1a;(1)原子性&#xff1a;一个事务中…

access 如何使用dolby_Access/VBA/Excel-Access表及字段创建-03

Part 1&#xff1a;前面的话对Access数据库的大部分操作都可以通过SQL语言来实现SQL:Structure Query Language&#xff0c;结构化查询语言&#xff0c;语法简单&#xff0c;非常容易学SQL语言的执行可借助于ADO&#xff0c;ADO本身也支持对数据库的各种操作&#xff0c;但是涉…

LeetCode 1937. 扣分后的最大得分(动态规划)

文章目录1. 题目2. 解题1. 题目 给你一个 m x n 的整数矩阵 points &#xff08;下标从 0 开始&#xff09;。 一开始你的得分为 0 &#xff0c;你想最大化从矩阵中得到的分数。 你的得分方式为&#xff1a;每一行 中选取一个格子&#xff0c;选中坐标为 (r, c) 的格子会给你…

逻辑斯谛回归模型

逻辑斯谛回归模型是研究因变量为二分类或多分类观察结果与影响因素之间的关系的一种概率型非线性回归模型。逻辑斯谛回归系数通过最大似然估计得到。Logistic函数如下&#xff1a; 式中x为 这里是输入变量的n个特征&#xff0c;然后按照Logistic函数形式求出。 假设有n个独立变…

mysql监控平台怎么做_MySQL监控平台的构建方法

MySQL监控平台的构建方法发布时间&#xff1a;2020-05-23 14:13:12来源&#xff1a;亿速云阅读&#xff1a;159作者&#xff1a;鸽子概述对于MySQL的监控平台&#xff0c;相信大家实现起来有很多了&#xff1a;基于天兔的监控&#xff0c;还有基于zabbix相关的二次开发。相信很…

查看宝塔面板账号密码命令_宝塔面板升级到最新版图文教程

往期教程&#xff1a;宝塔面板教程&#xff08;1&#xff09;基于云服务器搭建宝塔面板教程最全详解宝塔面板教程&#xff08;2&#xff09;宝塔面板添加WordPress站点详细图文教程宝塔面板教程&#xff08;3&#xff09;基于宝塔面板成功配置网站SSL安全证书宝塔面板教程&…

python 对象引用、可变性 和 垃圾回收

文章目录1. 变量是标签2. 元组的相对不可变性3. 默认浅复制4. 函数的参数作为引用时5. del 和 垃圾回收6. 弱引用7. 一些可能的坑&#xff01;&#xff01;&#xff01;learn from 《流畅的python》 1. 变量是标签 >>> a [1, 2, 3] >>> b a >>&g…

关于原型的一点总结

原型&#xff08;prototype&#xff09;无疑是JavaScript中一个十分重要的概念&#xff0c;围绕着原型所涉及的原型链继承、内建对象扩展&#xff0c;JS表现出独特的面向对象特性。 1.什么是原型每个JS的函数对象中都有一个默认的prototype属性&#xff0c;它指向的就是这个函数…

python canopen_Python canopener包_程序模块 - PyPI - Python中文网

用于打开文件的python便利函数canopener(filename, moder)。本地文件的行为与open()&#xff1a;>>> canopener(local_file.txt)url也可以作为文件名传递并打开进行读取。urllib2.urlopen()是在封面下使用的&#xff0c;因此它具有同等的支持&#xff1a;>>>…

天池 在线编程 最长AB子串(哈希)

文章目录1. 题目2. 解题1. 题目 描述 给你一个只由字母’A’和’B’组成的字符串s&#xff0c;找一个最长的子串&#xff0c;要求这个子串里面’A’和’B’的数目相等&#xff0c;输出该子串的长度。 这个子串可以为空。 s的长度n满足 2<n<1000000。示例 样例1 输入: s…

Tomcat 打开一闪而过

转载于:https://www.cnblogs.com/super90/p/4504326.html

java怎么递归_Java的递归、如何与流相结合

递归技术需求&#xff1a;扫描D:\test所有子文件夹及子子文件夹下的.jpg文件。我们如果用循环来做这件事&#xff0c;我们不知道循环的结束条件&#xff0c;也不知道到底有多少层&#xff0c;所以比较麻烦。我们可以用一种新的思想&#xff1a;递归。递归举例&#xff1a;从前有…

假设有搅乱顺序的一群儿童成一个队列_数据结构与算法系列之栈amp;队列(GO)...

以下完整代码均可从这里获取栈栈的基本概念「后进先出、先进后出就是典型的栈结构」。栈可以理解成一种受了限制的线性表&#xff0c;插入和删除都只能从一端进行当某个数据集合只涉及在一端插入和删除数据&#xff0c;并且满足后进先出、先进后出的特性&#xff0c;就应该首选…

datagridview 动态插入图片_挑战一张照片制作动态PPT背景

在PPT中&#xff0c;要做出好看的页面动画效果&#xff0c;常常需要用很多图片和装饰元素。而如果你手头的素材只有一张照片&#xff0c;如何才能快速做出好看的PPT背景效果呢&#xff1f;本期内容&#xff0c;我们就来一起挑战&#xff0c;使用一张照片&#xff0c;制作PPT动态…

sed搜索某行在行末追加_示范sed指定某行插入 追加和全局替换

有时候会有这样的需求&#xff0c;在指定的行后面或者是前面追加一行&#xff0c;这个时候可以使用sed来完成&#xff0c;具体用法如下a\ 在指定的行后面追加一行b\ 在指定的行前面追加一行使用指定的行号追加内容&#xff0c;在使用行号的过程中&#xff0c;需要注意的问题有以…

LeetCode 1941. 检查是否所有字符出现次数相同

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s &#xff0c;如果 s 是一个 好 字符串&#xff0c;请你返回 true &#xff0c;否则请返回 false 。 如果 s 中出现过的 所有 字符的出现次数 相同 &#xff0c;那么我们称字符串 s 是 好 字符串。 示例 1&#xff1a; 输入&…