94 腐烂的橘子

news2025/7/4 22:47:46

腐烂的橘子

    • 题解1 多源广度优先搜索
      • 另一种写法

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:

  • 值 0 代表空单元格;
  • 值 1 代表新鲜橘子;
  • 值 2 代表腐烂的橘子。
  • 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。

返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1

在这里插入图片描述
提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 10
  • grid[i][j] 仅为 0、1 或 2

题解1 多源广度优先搜索

class Solution {
public:
    int orangesRotting(vector<vector<int>>& grid) {
        int m = grid.size();
        int n = grid[0].size();
        int fresh = 0;
        int ret = 0;
        deque<pair<int, int>> q;
        // 每个新鲜橘子被腐烂的最短时间
        // 本身就腐烂的是0,没腐烂的是初始值-1
        int dis[10][10];
        memset(dis, -1, sizeof(dis));
        int dir_x[4]={0, 1, 0, -1};
        int dir_y[4]={1, 0, -1, 0};
        // 先查有没有腐烂的橘子
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(grid[i][j] == 2){
                    q.push_back(make_pair(i, j));
                    dis[i][j] = 0;
                }
                else if(grid[i][j] == 1)
                    fresh ++;
            }
        }

        // 没有新鲜橘子
        if(! fresh)
            return 0;
        else{
            while(q.size()){
                auto x = q.front();
                q.pop_front();
                for(int i = 0; i < 4; i++){
                    int tmpx = x.first + dir_x[i];
                    int tmpy = x.second + dir_y[i];
                    // ~(0) = 1
                    // 意思是碰到本来就烂的橘子先跳过?
                    if(tmpx < 0 || tmpy < 0 || tmpx >= m || tmpy >= n || !grid[tmpx][tmpy] || ~dis[tmpx][tmpy])
                    continue;
                    // 保证一层一层扩,不会多加
                    dis[tmpx][tmpy] = dis[x.first][x.second]+1;
                    q.push_back(make_pair(tmpx,tmpy));
                    if(grid[tmpx][tmpy] == 1){
                        fresh --;
                        ret = dis[tmpx][tmpy];
                        if(! fresh)
                            break;
                    }
                }
            }
        }
        return fresh ? -1 : ret; 
    }   
};

在这里插入图片描述

另一种写法

class Solution {
public:
    int orangesRotting(vector<vector<int>>& grid) {
        int m = grid.size();
        int n = grid[0].size();
        int fresh = 0;
        int ret = 0;
        deque<pair<int, int>> q;

        int dir_x[4]={0, 1, 0, -1};
        int dir_y[4]={1, 0, -1, 0};
        
        // 先查有没有腐烂的橘子
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(grid[i][j] == 2){
                    q.push_back(make_pair(i, j));
                }
                else if(grid[i][j] == 1)
                    fresh ++;
            }
        }

        // 没有新鲜橘子
        if(! fresh)
            return 0;
        else{
            while(fresh && q.size()){
                int t = q.size();
                ret ++;

                while(t --){

                    auto x = q.front();
                    q.pop_front();

                    for(int i = 0; i < 4; i++){

                        int tmpx = x.first + dir_x[i];
                        int tmpy = x.second + dir_y[i];

                        if(tmpx < 0 || tmpy < 0 || tmpx >= m || tmpy >= n || !grid[tmpx][tmpy])
                            continue;
                        
                        if(grid[tmpx][tmpy] == 1){
                            fresh --;
                            grid[tmpx][tmpy] = 2;
                            q.push_back(make_pair(tmpx,tmpy));
                            if(! fresh)
                                break;
                        }
                    }
                }
            }
        }
        return fresh ? -1 : ret; 
    }   
};

在这里插入图片描述

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

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

相关文章

儿童围栏上架亚马逊TEMU平台美国站做什么认证?儿童围栏认证标准ASTM F1004

ASTM F1004-21对 "伸缩门 "的定义是&#xff1a;"用于竖立在门口等开口处的障碍物&#xff0c;以防止幼儿通过&#xff0c;但可由能够操作锁定装置的老年人拆除"&#xff08;第3.1.7节&#xff09;。 ASTM F1004-21对 "可扩展围栏 "的定义是&am…

top和jstack分析堆栈问题

1.top 在服务器上&#xff0c;我们可以通过top命令查看各个进程的cpu使用情况&#xff0c;它默认是按cpu使用率由高到低排序的 由上图中&#xff0c;我们可以找出pid为21340的java进程&#xff0c;它占用了最高的cpu资源 2. top -Hp pid 通过top -Hp 21340可以查看该进程下&…

51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+原理图+PCB+设计报告+讲解视频)

51单片机的篮球计分器液晶LCD1602显示 &#x1f4d1;1.主要功能&#xff1a;&#x1f4d1;讲解视频&#xff1a;&#x1f4d1;2.仿真&#x1f4d1;3. 程序代码&#x1f4d1;4. 原理图&#x1f4d1;5. PCB图&#x1f4d1;6. 设计报告&#x1f4d1;7. 设计资料内容清单&&…

通信原理板块——时域均衡

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、均衡器 为了减小码间串扰的影响…

十种排序算法(2) - 代码和原理

本文建立在上一篇文章的基础上&#xff1a;《十种排序算法(1) - 准备工具》 注&#xff1a;本文以升序为例子进行实现和解释 1.选择排序 选择排序是最简单几种排序算法之一 (1) 原理 不断使用查找并选择最小的元素放到数组的首端 (2) 复杂度分析 最好&#xff1a;O(n^2…

Flask(Jinja2) 服务端模板注入漏洞(SSTI)

Flask&#xff08;Jinja2&#xff09; 服务端模板注入漏洞(SSTI) 参考 https://www.freebuf.com/articles/web/260504.html 验证漏洞存在 ?name{{7*7}} 回显49说明漏洞存在 vulhub给出的payload: {% for c in [].__class__.__base__.__subclasses__() %} {% if c.__name__…

多测师肖sir_高级金牌讲师_jenkins搭建

jenkins操作手册 一、jenkins介绍 1、持续集成&#xff08;CI&#xff09; Continuous integration 持续集成 团队开发成员每天都有集成他们的工作&#xff0c;通过每个成员每天至少集成一次&#xff0c;也就意味着一天有可 能多次集成。在工作中我们引入持续集成&#xff0c;通…

ESP-IDF-V5.1.1使用websocket

IDF Component Registry (espressif.com) 在windows系统中&#xff0c;在项目目录下使用命令 idf.py add-dependency "espressif/esp_websocket_client^1.1.0"

OneNote Win10自带的宝藏笔记工具

大家在上学期间&#xff0c;通常要做大量的笔记&#xff0c;为后期巩固和复习。中学小学期间&#xff0c;大家往往是通过手写笔记来记录所学知识&#xff0c;然而上了大学&#xff0c;更加自由的学习条件下&#xff0c;大家逐渐开始用电子产品来做笔记。无论是平板还是电脑&…

【解刊】1区TOP,国人友好,仅1个月左右录用,2天见刊!

计算机类 • 好刊解读 今天小编带来Elsevier旗下计算机领域好刊的解读&#xff0c;如有相关领域作者有意向投稿&#xff0c;可作为重点关注&#xff01;后文有同领域快刊发表案例&#xff0c;供您投稿参考~ 01 期刊简介 Knowledge-Based Systems ☑️出版社&#xff1a;Els…

Visual Studio 2022 + OpenCV 4.5.2 安装与配置教程

目录 OpenCV的下载与配置Visual Studio 2022的配置新建工程新建文件新建项目属性表环境配置测试先写一个输出将OpenCV的动态链接库添加到项目的 x64 | Debug下测试配置效果 Other OpenCV的下载与配置 参考这个OpenCV的下载与环境变量的配置&#xff1a; Windows10CLionOpenCV4…

「掌握创意,释放想象」——Photoshop 2023,你的无限可能!

Adobe Photoshop 2023(PS2023) 来了,全世界数以百万计的设计师、摄影师和艺术家使用 Photoshop 将不可能变为可能。从海报到包装&#xff0c;从基本的横幅到漂亮的网站&#xff0c;从令人难忘的徽标到引人注目的图标&#xff0c;Photoshop 2023让创意世界不断前进。借助直观的工…

Amazon EC2 安全可调用的云虚拟主机服务器

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Amazon EC2 打造全新的科技链 Amazon Elastic Compute Cloud&#xff08;Amazon EC2&#xff09;提供最广泛、最深入的计算平台&#xff0c;拥有超过 500 个实例&…

开放式耳机能保护听力吗?开放式耳机有哪些优缺点?

先说答案&#xff0c;开放式耳机是可以保护听力的&#xff01; 想要了解开放式耳机是否能保护听力&#xff0c;就要先知道什么是开放式耳机&#xff0c;开放式耳机是一种无需入耳&#xff0c;并且使用时不会堵塞耳道&#xff0c;也不会隔绝外界声音的蓝牙耳机。 一、开放式耳…

Gitlab服务器配置LDAP指导

ssh登录gitlab服务器&#xff1a;192.168.1.203修改配置文件 sudo su vim /etc/gitlab/gitlab.rb找到ldap_enabled和ldap_servers关键字并修改参数 保存配置文件并重新载入配置 gitlab-ctl reconfigure检查ldap相关配置是否成功&#xff08;列出前100个用户&#xff0c;若没…

JDBC SQL Server Source Connector: 一览与实践

在快速发展的数据驱动业务环境中&#xff0c;确保数据在各个系统间高效、准确地同步至关重要。为了进一步的数据处理和分析&#xff0c;经常需要将这些数据同步到其他数据处理系统。Apache SeaTunnel 提供了一个强大而灵活的数据集成框架&#xff0c;使得从 SQL Server 到其他系…

学不会Handler?那是因为你还没有看过这篇文章

对Android开发者来suo&#xff0c;Handler机制无疑是最重要的知识之一&#xff0c;大家肯定也已经看过诸多有关Handler的教学文章了&#xff0c;为什么你会看到这篇文章&#xff1f;显然是你还没学会&#xff0c;或者忘记了&#xff0c;或者想深究一下。好消息是&#xff0c;这…

相对而言,嵌入式开发和纯软件开发哪个更有优势?

相对而言&#xff0c;嵌入式开发和纯软件开发哪个更有优势&#xff1f; 你关心什么方面的优势&#xff1f; 1. 钱途&#xff1f; 纯软件胜&#xff0c;纯软件天花板高很多。嵌入式开发只能说还行。不过天花板这东西是对牛人(至少前30%的人)而言的&#xff0c;混饭吃的话差别就…

JTS: 16 Orientation 方向

这里写目录标题 版本代码 版本 org.locationtech.jts:jts-core:1.19.0 链接: github 代码 public static void main(String[] args) {OrientationUse orientationUse new OrientationUse();orientationUse.test02();}public void test02() {A new Coordinate(2, 1);B new …

高校为什么需要大数据挖掘平台?

目前数据挖掘已经成为各种应用领域的重要技术&#xff0c;大学数据挖掘课程的开放已经出现。数据挖掘课程整合了多门学科知识。该课程包括各种理论知识&#xff0c;也离不开相关的实用技术。整个教学过程是培养和提高学生全面创新和解决问题的能力。过去&#xff0c;教学过程理…