Leetcode 1926. 迷宫中离入口最近的出口

news/2024/10/20 13:46:00

1.题目基本信息

1.1.题目描述

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

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

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

1.2.题目地址

https://leetcode.cn/problems/nearest-exit-from-entrance-in-maze/description/

2.解题方法

2.1.解题思路

广度优先搜索

2.2.解题步骤

第一步,构建广度优先搜索的队列

第二步,初始化entrance入口的已访问状态

第三步,BFS模板进行BFS遍历,并记录BFS的层数,BFS遍历找到出口时退出遍历,此时的层数即为步数;如果遍历完后,还是没找到结果,则返回-1

3.解题代码

Python代码

from collections import dequeclass Solution:def nearestExit(self, maze: List[List[str]], entrance: List[int]) -> int:rows,cols=len(maze),len(maze[0])directs=[[-1,0],[0,-1],[1,0],[0,1]]# 第一步,构建广度优先搜索的队列entrance=tuple(entrance)que=deque([entrance])# 第二步,初始化entrance入口的已访问状态maze[entrance[0]][entrance[1]]="+"  # 初始化entrance为已经访问过result=0    # BFS遍历的层数# 第三步,BFS模板进行BFS遍历,并记录BFS的层数,BFS遍历找到出口时退出遍历,此时的层数即为步数;如果遍历完后,还是没找到结果,则返回-1while que:curLength=len(que)for _ in range(curLength):x,y=que.popleft()for direct in directs:nx,ny=x+direct[0],y+direct[1]npoint=(nx,ny)if 0<=nx<rows and 0<=ny<cols and maze[nx][ny]!="+":que.append(npoint)maze[nx][ny]="+"  # 标记为已经参观过了(这里需要在入队前添加到已访问状态中,如果在pop处加入已访问状态,将导致队列中出现很多重复的元素,导致超时)if nx in [0,rows-1] or ny in [0,cols-1]:return result+1result+=1return -1

4.执行结果

在这里插入图片描述

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

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

相关文章

PbootCMS伪静态怎么设置?(PbootCMS模板安装后内页打开404错误的解决方法)

PBootCMS 伪静态设置可以帮助解决内页打开 404 错误的问题。以下是一步步的设置方法: 1. 后台配置伪静态模式登录后台管理:登录 PBootCMS 后台管理系统。进入 URL 规则设置:导航到“配置参数” > “URL规则”。选择伪静态模式:在“URL规则”页面中,选择“伪静态模式”。…

PbootCMS网站提示:“会话目录写入权限不足”的解决办法

针对PbootCMS网站提示“会话目录写入权限不足”的问题,可以按照以下步骤进行解决: 解决步骤确定需要修改权限的目录:config 目录(存放授权码与数据库配置文件) data 目录(存放SQLite数据库文件) runtime 目录(存放日志文件)修改目录权限:使用FTP工具或SSH连接到服务器…

Nuxt.js 应用中的 build:before 事件钩子详解

title: Nuxt.js 应用中的 build:before 事件钩子详解 date: 2024/10/20 updated: 2024/10/20 author: cmdragon excerpt: build:before 钩子在 Nuxt.js 中是一种有力的工具,使开发者能够在应用的构建流程开始之前进行自定义处理和配置。在处理动态需求和配置时,开发者可以…

PbootCMS后台登录验证码有数值,但是看不清是怎么回事?

遇到PbootCMS后台登录验证码看不清的问题,可以尝试以下几个解决方法:调整浏览器设置:尝试清除浏览器缓存和Cookies,有时候旧的缓存数据会影响页面的显示。 检查浏览器的缩放比例是否合适,不合适的缩放比例可能会导致验证码图片显示不清晰。更换浏览器:有时候特定浏览器可…

PBOOTCMS登录请求发生错误,您可按照如下方式排查: 1、试着删除根目录下runtime目录,刷新页面重试;2、检查系统会话文件存储目录是否具有写入权限;

当您在使用 PbootCMS 时,后台登录请求发生错误,提示“表单提交校验失败,请刷新后重试”。这通常是由于缓存文件过多、会话文件存储目录权限问题或服务器环境问题引起的。 解决方法删除 runtime 目录步骤:备份文件:在进行任何修改前,请先备份 runtime 文件夹,以防止意外情…

pbootcms网站模板 Pbootcms模板下载安装教程

PbootCMS是一款基于PHP开发的内容管理系统,以其轻量、高效、易用的特点受到许多用户的喜爱。以下是PbootCMS模板的下载与安装步骤: 1. 下载PbootCMS模板访问官方网站:首先,访问PbootCMS的官方网站或模板市场。 选择模板:在模板市场中浏览并选择你喜欢的模板。 下载模板:点…

PbootCMS修改后台登录账号和密码

登录后台:使用当前的管理员账号和密码登录后台管理页面。修改密码:登录后,在右上角点击用户头像或用户名,通常会有一个下拉菜单。 选择“修改密码”或类似的选项。 在弹出的页面中,输入当前密码和新密码,然后保存。修改账号(可选):如果需要修改管理员账号,通常需要在…

pbootcms如何修改后台的登陆地址/账号以及密码呢?

修改后台登录地址 步骤备份文件:在进行任何修改前,请先备份 admin.php 文件,以防止意外情况发生。 备份命令示例(Linux):bashcp /path/to/your/project/admin.php /path/to/your/project/admin.php.bak重命名 admin.php 文件:将 admin.php 文件重命名为其他名称,例如 X…