力扣---腐烂的橘子

题目:

bfs思路:

感觉bfs还是很容易想到的,首先定义一个双端队列(队列也是可以的~),如果值为2,则入队列,我这里将队列中的元素定义为pair<int,int>。第一个int记录在数组中的位置,即将二维数组映射到一维数组。没明白的小伙伴可以先看看力扣hot---岛屿数量-CSDN博客。第二个int记录这个橘子第几分钟被感染。最后取最大的分钟就可以啦!(还要检查一下是否有没感染到的橘子,在橘子入队列的时候,记得将gridxy改为2就可以记录橘子被感染了)

代码:

C++:

cpp 复制代码
class Solution {
public:
    int p_x[4]={-1,1,0,0};
    int p_y[4]={0,0,-1,1};
    int orangesRotting(vector<vector<int>>& grid) {
        deque<pair<int,int>> q;
        int m=grid.size();
        int n=grid[0].size();
        int cnt=0;
        int res=0;
        //初始化q
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid[i][j]==2){
                    q.push_back({i*n+j,cnt}); //把数组转换成1维,并且记录第几分钟
                }
            }
        }
        //开始腐烂
        while(!q.empty()){
            //pop
            auto temp=q.front();
            q.pop_front();
            //腐烂四周
            int tempx=temp.first/n;
            int tempy=temp.first%n;
            int tempcnt=temp.second;
            //if(grid[tempx][tempy]==2){continue;}
            for(int k=0;k<4;k++){
                int x=tempx+p_x[k];
                int y=tempy+p_y[k];
                if(x>=0 && x<m && y>=0 && y<n){
                    if(grid[x][y]==0||grid[x][y]==2){continue;}
                    grid[x][y]=2;
                    q.push_back({x*n+y,tempcnt+1});
                    cnt=max(cnt,tempcnt+1);
                }
            }
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid[i][j]==1){
                    return -1;
                }
            }
        }
        return cnt;
    }
};

Python代码就不附啦,因为和今天发布的力扣---接雨水---单调队列-CSDN博客Python代码很像哦

相关推荐
圣保罗的大教堂3 小时前
leetcode 3867. 数对的最大公约数之和 中等
leetcode
To_OC6 小时前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
renhongxia18 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
G.O.G.O.G8 小时前
LeetCode SQL 从入门到精通(MySQL)06(上)
数据库·sql·mysql·leetcode
zephyr0510 小时前
动态规划-最长上升子序列问题
算法·动态规划
闪电悠米10 小时前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法
卡提西亚12 小时前
leetcode-1438. 绝对差不超过限制的最长连续子数组
算法·leetcode·职场和发展
Java面试题总结12 小时前
LeetCode 93.复原IP地址
算法·leetcode·职场和发展·.net
从零开始的代码生活_12 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
yuannl1013 小时前
图的存储方式
数据结构