LeetCode 994.腐烂的橘子

994. 腐烂的橘子

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

  • 值 0 代表空单元格;
  • 值 1 代表新鲜橘子;
  • 值 2 代表腐烂的橘子。

每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。

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

示例 1:

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

示例 2:

输入:[[2,1,1],[0,1,1],[1,0,1]]
输出:-1
解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。

示例 3:

输入:[[0,2]]
输出:0
解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。

思路:一道bfs模板题,记录每个橘子的时间,最大的即为答案

class Solution {
public:
    struct Node{
        int x,y;
        int time; //记录时间
    };
    int g[11][11];
    int X[4] = {0,0,-1,1};
    int Y[4] = {-1,1,0,0};
    bool inq[11][11] = {false};
    
    int orangesRotting(vector<vector<int>>& grid) {
        int res = 0;
        int n = grid.size();
        int m = grid[0].size();
        queue<Node> q;
        Node bad;
        //把初始的坏橘子全部加入队列
        for(int i = 0;i<n;i++){
            for(int j = 0;j<m;j++){
                if(grid[i][j]==2){
                    bad.x = i;
                    bad.y = j;
                    bad.time = 0;
                    q.push(bad);
                    inq[i][j] = true;
                }
            }
        }
        while(!q.empty()){
            Node now = q.front();
            q.pop();
            //每个橘子都有一个时间属性,找到最大值即为题目要求的最小分钟数
            if(res<now.time)res = now.time;
            for(int i = 0;i<4;i++){
                int x = now.x+X[i];
                int y = now.y+Y[i];
                if(x>=0&&x<n&&y>=0&&y<m&&inq[x][y]==false&&grid[x][y]==1){
                    Node newnode;
                    newnode.x = x;
                    newnode.y = y;
                    newnode.time = now.time+1; //新鲜橘子变坏需要加一分钟
                    q.push(newnode);
                    inq[x][y] = true;
                    grid[x][y] = 2;
                }
            }
        }
        //如果还有新鲜橘子则返回-1
        for(int i = 0;i<n;i++){
            for(int j = 0;j<m;j++){
                if(grid[i][j]==1)return -1;
            }
        }
        return res;
    }
};
发布了38 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40167974/article/details/104656431