当前位置: 首页 > news >正文

LeetCode_BFS_中等_1926.迷宫中离入口最近的出口

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

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 一定是空格子。

2.思路

(1)BFS

3.代码实现(Java)

//思路1————BFS
class Solution {public int nearestExit(char[][] maze, int[] entrance) {int m = maze.length;int n = maze[0].length;int[][] dirs = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};Queue<int[]> queue = new LinkedList<>();queue.offer(new int[]{entrance[0], entrance[1], 0});maze[entrance[0]][entrance[1]] = '+';while (!queue.isEmpty()) {int[] curPos = queue.poll();int curX = curPos[0];int curY = curPos[1];int dis = curPos[2];//朝上下左右四个方向进行遍历for (int[] dir : dirs) {int nx = curX + dir[0];int ny = curY + dir[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 dis + 1;}maze[nx][ny] = '+';queue.offer(new int[]{nx, ny, dis + 1});}}}return -1;}
}
http://www.lryc.cn/news/178767.html

相关文章:

  • 开源Windows12网页版HTML源码
  • vscode中使用指定路径下的cmake
  • 复杂度分析
  • Linux安装jrockit-jdk1.6.0_29-R28.2.0-4.1.0-linux-x64
  • 7.2 怎样定义函数
  • Chrome扩展V2到V3的变化
  • lock、tryLock、lockInterruptibly有什么区别?
  • mysql面试题5:索引、主键、唯一索引、联合索引的区别?什么情况下设置了索引但无法使用?并且举例说明
  • 数据集笔记:纽约花旗共享单车od数据
  • 为什么 0.1+0.2 不等于 0.3
  • huggingface_hub v0.17 现已发布
  • 机器学习——一元线性回归构造直线,并给出损失函数
  • OpenHarmony自定义组件介绍
  • 云原生之使用Docker部署PDF多功能工具Stirling-PDF
  • B树和B+树的介绍和对比,以及MySQL为何选择B+树
  • MD5 绕过第一式:弱比较绕过
  • 红黑树是如何实现的?
  • 实验室没人导该怎么办
  • pytest简明教程
  • 解决方案:解决https页面加载http资源报错
  • 嵌入式开源库之libmodbus学习笔记
  • Spring MVC 中的数据验证技术
  • windows 修改hosts映射,可以ping通,但是无法通过http url 路径访问,出现 500 Internal Privoxy Error
  • 如何将图片转为ico格式
  • ElasticSearch - 基于 JavaRestClient 操作索引库和文档
  • 【人脸质量评估】MagFace:一个既可以用作人脸识别,又可以用作人脸质量评估的方法
  • FPGA 图像缩放 千兆网 UDP 网络视频传输,基于RTL8211 PHY实现,提供工程和QT上位机源码加技术支持
  • 智能驾驶、智能家居、智能工业中的 AI 关键基础设施,半导体厂商恩智浦的角色是什么?
  • APScheduler包——python tornado框架中实现定时任务
  • BASH shell脚本篇3——字符串处理