首页 > 其他分享 >994. 腐烂的橘子

994. 腐烂的橘子

时间:2023-09-22 15:36:34浏览次数:29  
标签:994 遍历 int 腐烂 grid fresh que 橘子

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

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

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

示例 1:

输入:grid = [[2,1,1],[1,1,0],[0,1,1]]
输出:4

> 代码


class Solution {

    int dirt[4][2] = { {-1,0},{1,0},{0,1},{0,-1} };
public:
    int orangesRotting(vector<vector<int>>& grid) {
        int min = 0, fresh = 0;///fresh记录每一个新鲜的水果,min为记录层数
        //队列,保存一对坐标
        queue<pair<int, int>>que;
        //遍历地图
        for (int i = 0; i < grid.size(); i++) {
            for (int j = 0; j < grid[0].size(); j++) {
                if (grid[i][j] == 1)fresh++;   //记录新鲜水果的数量
                else if (grid[i][j] == 2) que.push({ i,j });//记录腐烂水果坐标
            }
        }
        //层序遍历,while(直到没有元素)
        //保存对首元素,
        //遍历层的元素
        //遍历层的四周元素
        //如果符合就标记走过,添加到新的队列,并且水果新鲜-1
        while (!que.empty()) {
            int n = que.size();
            bool rotten = false;
            //遍历队列一层的元素
            for (int i = 0; i < n; i++) {
                auto x = que.front();   //保存腐烂元素的坐标
                que.pop();      //出队列
                for (auto cur : dirt) {
                    int i = x.first + cur[0];   //更新x的坐标
                    int j = x.second + cur[1];  //更新y的坐标
                    //如果遍历的坐标是新鲜的和符合要求的
                    if (i >= 0 && i < grid.size() && j >= 0 && j < grid[0].size() && grid[i][j] == 1) {
                        grid[i][j] = 2;     //更新坐标
                        que.push({ i,j });   //加入队列
                        fresh--;            //新鲜数量减一
                        rotten = true;      //标记遍历完一层
                    }
                }
            }
            if (rotten) min++; //遍历完一层,记录+1
        }
        return fresh ? -1 : min; //如果fresh为0,全完腐烂,返回min
                                //如果fresh不为0,表示还有新鲜的,返回-1
    }
};

标签:994,遍历,int,腐烂,grid,fresh,que,橘子
From: https://www.cnblogs.com/lihaoxiang/p/17722484.html

相关文章

  • Gym102994M Travel Dream
    题意:\(n\)个点的图,找一个有\(k\)个点的的简单环,使其边权和最大。随机黑白染色,拆成两条颜色不同的不相交链,做\(300\)次即可。链的情况是好做的,做完后,预处理\(f_{x,y}\)表示\(x\)到\(y\)的最大距离,枚举两条端点颜色不同的边可以直接合并。链点数\(\leq4\)都是可以直......
  • leetcode 题库994——bfs典型解法(队列+递归实现)
     classSolution:deforangesRotting(self,grid:list[list[int]])->int:m,n=len(grid),len(grid[0])queue,good=[],[]defbfs(queue,good,m,n,grid):times=0directions=[(-1,0),(1,0),(0,1),(0,-1)]......
  • 北大ACM poj3994 Probability One
    ProbabilityOneTimeLimit:1000MS MemoryLimit:65536KTotalSubmissions:938 Accepted:660DescriptionNumberguessingisapopulargamebetweenelementary-schoolkids.Teachersencouragepupilstoplaythegameasitenhancestheirarithmeticski......
  • P1216 [USACO1.5] [IOI1994]数字三角形
    自己的思想:要用逆序,但是某个未知的位置可能存在一个非常大的数,因此不知道如何dp看题解之后:对于倒数第二行的数,可以算出它们的最优解,依次往上推,第一个数就是整体的最优解,其实本质上可以用隔离意识来看,在搞最后一排时,将前面所有排隔离掉,在处理中间的每一排时,又将其他排隔离掉接下......
  • gym 102994M Travel Dream 题解
    给定带权无向图,求最大\(k\)元环。\(n,m\leq300,3\leqk\leq10\),无重边。把\(k=3\)判掉,可以\(O(m^2)\)轻松解决。把\(k\)元环拆成长度为\(\dfrac{k}{2}-1\)的链\(+\)长度\(k-\dfrac{k}{2}-1\)的链\(+\)连接两条链的两条边。(长度指边的个数)问题:两条链需要无......
  • CF Gym 102994 Travel Dream
    题意求一张带权无向图中最大的\(k\)元简单环,无解输出impossible。\(1\len,m\le300,k\le10\)。注意\(k\)的范围题解\(k\)很小,存在简单办法对小环小链进行预处理,考虑折半。首先考虑怎么求长度小于等于4的链。长度为\(1,2\)的链可以直接枚举,长度为\(3\)的链......
  • 文件系统考古 3:1994 - The SGI XFS Filesystem
    在1994年,论文《XFS文件系统的可扩展性》发表了。自1984年以来,计算机的发展速度变得更快,存储容量也增加了。值得注意的是,在这个时期出现了更多配备多个CPU的计算机,并且存储容量已经达到了TB级别。对于这些设备,仅仅对4.3BSD快速文件系统(或SGIIRIX中称为EFS的修改版......
  • 使用libavcodec将mp3音频文件解码为pcm音频采样数据【[mp3float @ 0x561c1ec49940] He
    一.打开和关闭输入文件和输出文件想要解决上面提到的问题,我们需要对mp3文件的格式有个大致了解,为了方便讲解,我这里画了个示意图:ID3V2包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。Frame一系列的帧,个数由文件大小和帧长决定ID3V1包含了作者,作曲,专......
  • 图解LeetCode——994. 腐烂的橘子
    一、题目在给定的 mxn 网格 grid 中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,腐烂的橘子 周围 4个方向上相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果......
  • 机器学习--识别腐烂水果和不腐烂的水果
    (一)选题背景:苹果树是优良的经济作物,目前我国苹果树的种植面积较大,产量较高,而且苹果的品种也在不断改良和更新。苹果的种植条件比较宽泛,大部分栽植于北方地区,种植面积大,市场需求量也大,其中陕西洛川、甘肃天水、宜川、新疆阿克苏等地盛产苹果,这几个地方产的苹果品质优良。农场采摘了......