力扣75——图广度优先搜索

总结leetcode75中的图广度优先搜索算法题解题思路。
上一篇:力扣75——图深度优先搜索

力扣75——图广度优先搜索

  • 1 迷宫中离入口最近的出口
  • 2 腐烂的橘子
  • 1-2 解题总结

1 迷宫中离入口最近的出口

题目:

给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 '.' 表示)
和墙(用 '+' 表示)。同时给你迷宫的入口 entrance ,用 entrance = [entrancerow, entrancecol] 表示你一开始所在格子的行和列。
每一步操作,你可以往 上,下,左 或者 右 移动一个格子。你不能进入墙所在的格子,
你也不能离开迷宫。你的目标是找到离 entrance 最近 的出口。出口 的含义是 maze 
边界 上的 空格子。entrance 格子 不算 出口。请你返回从 entrance 到最近出口的最短路径的 步数 ,如果不存在这样的路径,请你返回 -1

题解:
广度优先搜索
将与入口相邻的空格子压入队列。
然后用while循环遍历队列中的格子,每个访问过的格子都要做标记(记录它到入口的距离,并将状态设置为已访问)。
如果当前格子为出口,则返回距离d+1
如果访问玩所有格子,则返回-1

class Solution {
public:int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {int m = maze.size();int n = maze[0].size();// 上下左右四个相邻坐标对应的行列变化量vector<int> dx = {1, 0, -1, 0};vector<int> dy = {0, 1, 0, -1};queue<tuple<int, int, int>> q;// 入口加入队列并修改为墙q.emplace(entrance[0], entrance[1], 0);maze[entrance[0]][entrance[1]] = '+';while (!q.empty()){auto [cx, cy, d] = q.front();q.pop();// 遍历四个方向相邻坐标for (int k = 0; k < 4; ++k){int nx = cx + dx[k];int ny = cy + dy[k];// 新坐标合法且不为墙if (nx >= 0 && nx < m && ny >= 0 && ny < n && maze[nx][ny] == '.'){if (nx == 0 || nx == m - 1 || ny == 0 || ny == n - 1){// 新坐标为出口,返回距离作为答案return d + 1;}// 新坐标为空格子且不为出口,修改为墙并加入队列maze[nx][ny] = '+';q.emplace(nx, ny, d + 1);}}}// 不存在到出口的路径,返回 -1return -1;}
};

2 腐烂的橘子

题目:

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1

题解:
广度优先搜索
定义矩阵dis,记录每个橘子是从第几天开始腐烂的。-1表示未腐烂或者没有橘子。
先找出所有腐烂的句子,并将其位置存入队列Q
while遍历Q中的烂橘子,如果烂橘子grid[i][j]的周围有未腐烂的橘子,则将对应的dis值改为dis[i][j]+1,并将该橘子的位置压入队列Q
Q为空之后,查看是否全部腐烂。

class Solution {int cnt;int dis[10][10];int dir_x[4]={0, 1, 0, -1};int dir_y[4]={1, 0, -1, 0};
public:int orangesRotting(vector<vector<int>>& grid) {queue<pair<int,int> >Q;memset(dis, -1, sizeof(dis));cnt = 0;int n=(int)grid.size(), m=(int)grid[0].size(), ans = 0; for (int i = 0; i < n; ++i){for (int j = 0; j < m; ++j){if (grid[i][j] == 2){Q.push(make_pair(i, j));dis[i][j] = 0;}else if (grid[i][j] == 1) cnt += 1;}}while (!Q.empty()){pair<int,int> x = Q.front();Q.pop();for (int i = 0; i < 4; ++i){int tx = x.first + dir_x[i];int ty = x.second + dir_y[i];if (tx < 0|| tx >= n || ty < 0|| ty >= m|| dis[tx][ty]!=-1 || !grid[tx][ty]) continue;dis[tx][ty] = dis[x.first][x.second] + 1;Q.push(make_pair(tx, ty));cnt -= 1;ans = dis[tx][ty];if (!cnt) break;}}return cnt ? -1 : ans;}
};

1-2 解题总结

题目共同的特点:从起始节点出发,搜索并记录某个或全部节点到起始节点的距离。
是否能用深度优先搜索:不能,因为有些节点可以通过多条路径到达起始节点,如果用深度优先搜索,不能保证某条深度搜索路径算出来的距离是该节点的最短距离。

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

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

相关文章

Kafka中的 ISR 机制

ISR 是什么 ISR 的全称叫做&#xff1a; In-Sync Replicas &#xff08;同步副本集&#xff09;, 可以理解为和 leader 保持同步的所有副本的集合。ISR 动态维护了一个和 leader 副本保持同步副本集合&#xff0c;ISR 中的副本全部都和 leader 的数据保持同步。 设一个场景&a…

JupyterHub实战应用

一、JupyerHub jupyter notebook 是一个非常有用的工具&#xff0c;我们可以在浏览器中任意编辑调试我们的python代码&#xff0c;并且支持markdown 语法&#xff0c;可以说是科研利器。但是这种情况适合个人使用&#xff0c;也就是jupyter notebook以我们自己的主机作为服务器…

PostgreSQL逻辑备份pg_dump使用及其原理解析

一、原理分析 1、循环调用getopt_long解析命令行参数&#xff0c;将参数保存到static DumpOptions dopt;中 2、判断参数是否相容&#xff0c;不相容则退出&#xff1a; options -s/--schema-only and -a/--data-only cannot be used togetheroptions -c/--clean and -a/--data…

uni-app中监听网络状态,并在嵌入webView页面的组件中添加网络监测

uni-app中监听网络状态&#xff0c;并在嵌入webView页面的组件中添加网络监测 uni-app中监听网络状态 下载插件 打开网络异常组件页面&#xff0c;点击"下载插件并导入HBuilderX"按钮&#xff0c;打开HBuilderX软件后&#xff0c;选择需要导入插件的项目&#xff…

机器学习与模型识别1:SVM(支持向量机)

一、简介 SVM是一种二类分类模型&#xff0c;在特征空间中寻找间隔最大的分离超平面&#xff0c;使得数据得到高效的二分类。 二、SVM损失函数 SVM 的三种损失函数衡量模型的性能。 1. 0-1 损失&#xff1a; 当正例样本落在 y0 下方则损失为 0&#xff0c;否则损失为…

系统架构设计师-信息安全技术(1)

目录 一、信息安全基础 1、信息安全五要素 2、网络安全漏洞 3、网络安全威胁 4、安全措施的目标 二、信息加解密技术 1、对称加密 2、非对称加密 3、加密算法对比 三、密钥管理技术 1、数字证书 2、PKI公钥体系 四、访问控制技术 1、访问控制基本模型 2、访问控制的实现技术…

【Linux命令详解 | ssh命令】 ssh命令用于远程登录到其他计算机,实现安全的远程管理

文章标题 简介一&#xff0c;参数列表二&#xff0c;使用介绍1. 连接远程服务器2. 使用SSH密钥登录2.1 生成密钥对2.2 将公钥复制到远程服务器 3. 端口转发3.1 本地端口转发3.2 远程端口转发 4. X11转发5. 文件传输与远程命令执行5.1 文件传输5.1.1 从本地向远程传输文件5.1.2 …

TensorFlow 的基本概念和使用场景

简介 TensorFlow 是一个开源的人工智能框架&#xff0c;由 Google 公司开发&#xff0c;用于构建和训练机器学习模型。 TensorFlow 的基本概念包括&#xff1a; 1. 张量 (Tensor): TensorFlow 中的基本数据结构&#xff0c;可以理解为多维数组。 2. 计算图 (Graph): TensorF…

深度学习入门-3-计算机视觉-图像分类

1.概述 图像分类是根据图像的语义信息对不同类别图像进行区分&#xff0c;是计算机视觉的核心&#xff0c;是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层次视觉任务的基础。图像分类在许多领域都有着广泛的应用&#xff0c;如&#xff1a;安防领域的人脸识别…

软考笔记——9.软件工程

软件工程的基本原理&#xff1a;用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制、采用现代程序设计技术、结果应能清除的审查、开发小组的人员应少而精、承认不断改进软件工程事件的必要性。 软件工程的基本要素&#xff1a;方法、工具、过程 软件生…

babylonjs基于自定义网格生成围栏动画

效果&#xff1a; import { Vector3, Mesh, MeshBuilder, StandardMaterial, Texture, Animation, Color3 } from "babylonjs/core"; import imgUrl from "./image/headerwangge2.png" // 创建模型护栏特效 export default class CreateRail {constructor…

cocos creator 设置精灵镜像翻转效果

在 Cocos Creator 中&#xff0c;你可以通过代码来设置精灵节点的镜像翻转效果。具体来说&#xff0c;你可以使用精灵节点的 setScale 方法来实现这一点。以下是在代码中设置水平镜像翻转和垂直镜像翻转的示例&#xff1a; // 获取精灵节点的引用 let spriteNode cc.find(&qu…

小程序swiper一个轮播显示一个半内容且实现无缝滚动

效果图&#xff1a; wxml&#xff08;无缝滚动&#xff1a;circular"true"&#xff09;&#xff1a; <!--components/tool_version/tool_version.wxml--> <view class"tool-version"><swiper class"tool-version-swiper" circul…

数模论文写作细节要求

目录 优秀论文必要条件 数学建模的基本思路 第一步&#xff1a;了解问题——查文献、找数据 第二步&#xff1a;阐述要解决什么问题、用什么方法 其余步骤&#xff1a;给出数学模型、计算求解、对比结果与真实情况、应用于现实问题。 使用某种数学方法的理由和依据 创…

Python爬虫性能优化:多进程协程提速实践指南

各位大佬们我又回来了&#xff0c;今天我们来聊聊如何通过多进程和协程来优化Python爬虫的性能&#xff0c;让我们的爬虫程序6到飞起&#xff01;我将会提供一些实用的解决方案&#xff0c;让你的爬虫速度提升到新的高度&#xff01; 1、多进程提速 首先&#xff0c;让我们来看…

cs231n assignment2 q5 PyTorch on CIFAR-10

文章目录 嫌啰嗦直接看源码Q5 :PyTorch on CIFAR-10three_layer_convnet题面解析代码输出 Training a ConvNet题面解析代码输出 ThreeLayerConvNet题面解析代码输出 Train a Three-Layer ConvNet题面解析代码输出 Sequential API: Three-Layer ConvNet题面解析代码输出 CIFAR-1…

SpringBoot整合ArtemisMQ笔记

SpringBoot整合ArtemisMQ笔记 本案例是springboot2.4.2整合Apache ArtemisMQ, 发送jms信息和订阅jms消息的代码示例pom配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-artemis</artifactId><…

BT利器之wazuh

目录 一、什么是wazuh 二、wazuh的安装 1.仓库安装 2.虚拟机OVA安装 3.其他安装方式 三、浅析wazuh的规则、解码器等告警原理以及主动响应 1.主动响应(active-response) 2.告警信息(alerts) 3.规则以及解码器(rules and decoders) 3.1.规则 3.2.解码器 4.linux后门r…

力扣75——图深度优先搜索

总结leetcode75中的图深度优先搜索算法题解题思路。 上一篇&#xff1a;力扣75——二叉搜索树 力扣75——图深度优先搜索 1 钥匙和房间2 省份数量3 重新规划路线4 除法求值1-4 解题总结 1 钥匙和房间 题目&#xff1a; 有 n 个房间&#xff0c;房间按从 0 到 n - 1 编号。最初…

【Matter】基于Ubuntu 22.04搭建matter开发环境:chip-tool 配网之 matter-over-wifi

前言 主要是记录一下学习过程&#xff0c;梳理下思路&#xff0c;抛转~ 官方的开发环境&#xff0c;基于Linux版本&#xff0c;官方的环境是基于树莓派环境的&#xff0c;原理其实也比较明了&#xff0c;目的也比较明确&#xff0c;就是达到Linux 主机和wifi 路由在同一局域网…