力扣---腐烂的橘子

题目:

bfs思路:

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

相关推荐
NAGNIP5 小时前
一文搞懂树模型与集成模型
算法·面试
NAGNIP5 小时前
万字长文!一文搞懂监督学习中的分类模型!
算法·面试
技术狂人1685 小时前
工业大模型工程化部署实战!4 卡 L40S 高可用集群(动态资源调度 + 监控告警 + 国产化适配)
人工智能·算法·面试·职场和发展·vllm
D_FW5 小时前
数据结构第六章:图
数据结构·算法
a程序小傲6 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
自学不成才6 小时前
深度复盘:一次flutter应用基于内存取证的黑盒加密破解实录并完善算法推理助手
c++·python·算法·数据挖掘
June`6 小时前
全排列与子集算法精解
算法·leetcode·深度优先
徐先生 @_@|||7 小时前
Palantir Foundry 五层架构模型详解
开发语言·python·深度学习·算法·机器学习·架构
夏鹏今天学习了吗7 小时前
【LeetCode热题100(78/100)】爬楼梯
算法·leetcode·职场和发展