【leetcode994】腐烂的橘子(BFS)

文章目录

  • 一、题目
  • 二、思路
  • 三、代码

一、题目

在这里插入图片描述

在这里插入图片描述

二、思路

  • 首先将所有烂橘子入队,然后常规BFS遍历,注意while的截止条件除了队列为空,新鲜橘子数量大于0(没新鲜橘子也没必要继续遍历,保证时间计算的正确性),这两者一个不满足就可以停止
  • 每分钟进行一次【腐烂扩散】,使用BFS对二维图进行遍历,注意和二叉树的层次遍历不一样(二叉树则是只有一个根节点,这里可能有多个腐烂橘子-根节点)。
  • auto [x, y] = q.front()是C++17引入的新语法,结构化绑定,可以从数组、元组或结构体中一次性解包多个值,并将他们绑定到多个变量上,比如这里就是声明了xy变量,然后将这2个变量绑定到元组中。如果不这么使用,可以直接通过firstsecond访问pair元素的数值。
  • auto& dir: directions是C++11的语法,&表示引用,直接auto dir则是按值访问,前者可以避免不必要的复制,并且允许你修改容器的容器。

三、代码

class Solution {
public:int orangesRotting(vector<vector<int>>& grid) {int m = grid.size();int n = grid[0].size();//存储上下左右的坐标方位vector<pair<int, int>> directions = {{0,1}, {0,-1}, {1,0},{-1,0}};int fresh_num = 0;//创建队列,存储腐烂的橘子二维坐标位置queue<pair<int, int>>q;for(int i=0; i < m;i++){for(int j=0; j < n; j++){if (grid[i][j] == 1)fresh_num += 1;//将所有烂橘子入队列if (grid[i][j] == 2)q.push({i, j});}}int minutes = 0;//烂橘子队列中没有橘子后则停止while(!q.empty() && fresh_num > 0){int q_num = q.size();//所有的烂橘子同时开始干活for(int i=0; i< q_num; i++){ //队首元素pair<int, int>one = q.front();q.pop(); //出队int x = one.first;int y = one.second;//遍历当前位置的上下左右for(auto& dir: directions){int nx = x + dir.first;int ny = y + dir.second;if(nx >= 0 && nx < m && ny >= 0 && ny < n && grid[nx][ny] == 1){ //如果是新鲜橘子grid[nx][ny] = 2;q.push({nx, ny});fresh_num -= 1;}}}minutes += 1;}return fresh_num == 0?minutes:-1;}
};

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

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

相关文章

关于Build Your Own Botnet的尝试

这是一次失败的尝试、 原文地址&#xff1a;关于Build Your Own Botnet的尝试 - Pleasure的博客 下面是正文内容&#xff1a; 前言 我在上一篇关于DDOS的文章种提到过这个项目&#xff0c;而且说明了由于这个项目是在2020年发布并开源的&#xff0c;并且已经有两年没有进行跟…

HMI界面:感官与体验俱佳的智能家居界面分享

Hello&#xff0c;我是大千UI工场&#xff0c;本期分享HMI人机交互界面在智能家居领域的案例&#xff0c;关注大千&#xff0c;学习N多UI干货&#xff0c;有设计需求&#xff0c;可以联络。 设计感官和体验俱佳智能家居的UI界面时&#xff0c;可以考虑以下几个方面&#xff1a;…

【王道数据结构】【chapter5树与二叉树】【P159t17~19】【统考真题】

目录 2014年统考 2017年统考 2022年统考 2014年统考 #include <iostream> #include <stack> #include <queue> typedef struct treenode{int weight;struct treenode *left;struct treenode *right; }treenode,*ptreenode;ptreenode buytreenode(int x) {p…

python----输入输出算数运算

1.格式化输出 如果我们直接打印输出&#xff0c;就是输出变量的值&#xff0c;例如&#xff1a; 如果我们想打印a10就需要格式化字符串&#xff0c;就是使用f进行格式化&#xff0c;如图所示&#xff1b; 2.控制台输入 input执行的时候&#xff0c;就会等待用户进行输入&…

free pascal:fpwebview 组件通过 JSBridge 调用本机TTS

从 https://github.com/PierceNg/fpwebview 下载 fpwebview-master.zip 简单易用。 先请看 \fpwebview-master\README.md cd \lazarus\projects\fpwebview-master\demo\js_bidir 学习 js_bidir.lpr &#xff0c;编写 js_bind_speak.lpr 如下&#xff0c;通过 JSBridge 调用本…

相机图像质量研究(24)常见问题总结:CMOS期间对成像的影响--摩尔纹

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

RH850从0搭建Autosar开发环境【2X】- Davinci Configurator之XCP模块配置详解(上)

XCP模块配置详解 - 上 一、XCP模块配置项处理1.1 Tx Pdu配置项二、XCP模块其他配置项2.1 参数XcpMainFunctionPeriod2.2 参数XcpOnCanEnabled2.3 容器XcpOnCan总结从本节开始先专注与配置项错误处理以及构建Autosar Rh850的最小系统搭建。 XCP模块在汽车电子各控制器中处于十分…

摸索设计模式的魅力:从策略模式看软件设计的智慧-灵活应对变化的艺术

设计模式专栏&#xff1a;http://t.csdnimg.cn/U54zu 目录 一、案例场景1.1 一坨坨代码实现1.2 存在的问题 二、使用策略模式解决问题2.1 使用策略模式重构代码2.2 克服了问题 三、模式讲解3.1 结构图及说明3.2 实现步骤和注意事项3.3 适用场景 四、优势和局限性4.1 优势4.2 局…

软件实例分享,门诊处方软件存储模板处方笺教程,个体诊所电子处方开单系统软件教程

软件实例分享&#xff0c;门诊处方软件存储模板处方笺教程&#xff0c;个体诊所电子处方开单系统软件教程、 一、前言 以下软件教程以 佳易王诊所电子处方管理软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 电子处方软件支持病历汇总…

Linux第54步_根文件系统第1步_编译busybox并安装_然后添加“根文件系统”的库

学习编译busybox&#xff0c;并安装&#xff0c;然后添加“根文件系统”的库。有人说busybox构建根文件系统&#xff0c;只适合学习&#xff0c;不适合做项目。 1、了解ubuntu的根文件系统 根文件系统的目录名为“/”&#xff0c;就是一个斜杠。 1)、输入“cd /回车”&…

中国比特币矿工的新根据地:埃塞俄比亚

原文标题&#xff1a;《Chinese Bitcoin Miners Find a New Crypto Haven in Ethiopia》 撰文&#xff1a;David Pan、Fasika Tadesse&#xff0c;彭博社 编译&#xff1a;Carl&#xff0c;Techub News 中国比特币矿工的新根据地&#xff1a;埃塞俄比亚 去年春天&#xff0c…

18 19 SPI接口的74HC595驱动数码管实验

1. 串行移位寄存器原理&#xff08;以四个移位寄存器为例&#xff09; 1. 通过移位寄存器实现串转并&#xff1a;一个数据输入端口可得到四位并行数据。 通过给data输送0101数据&#xff0c;那么在经过四个时钟周期后&#xff0c;与data相连的四个寄存器的输出端口得到了0101…