leetcode-cpp 994.腐烂的橘子

994.腐烂的橘子

  • 题目:

在这里插入图片描述

  • 链接

    leetcode

  • solution:

    胡烂的橘子

    有点像那个染色问题

    BFS 感觉难点在于怎么判断还能不能腐烂橘子 写了一堆又臭又长的代码…

    ps:学会了一个东西 就是需要取上下左右值的时候 可以写一个数组{ {1,0},{-1,0},{0,1},{0,-1}}

    然后先计算 再判断是否超界 比一层一层的判断之后再计算好

  • code


class Solution {
public:
//BFS!!!!!!!!!!!!!!!!!!!!!!!!!!!
    int orangesRotting(vector<vector<int>>& grid) {
        if(grid.size()==0||grid[0].size()==0) return -1;
        queue<pair<int,int>>q;
        int count=0;
        for(int i=0;i<grid.size();i++){
            for(int j=0;j<grid[0].size();j++){
                if(grid[i][j]!=0) count++;
                if(grid[i][j]==2)
                q.push(make_pair(i,j));      
            }
        }
        int time=0;
        if(count==q.size()) return 0;
    vector<pair<int,int>>ms={
   
   {1,0},{-1,0},{0,1},{0,-1}};
    while(!q.empty()){
        int len=q.size();
        time++;
        while(len--){
            auto t=q.front();
            q.pop();
            for(auto m:ms){
                int x=t.first+m.first;
                int y=t.second+m.second;//pair<>is a good tool
                if(x<0||x>=grid.size()||y<0||y>=grid[0].size()) continue;//以后遇到这样用,就不用每次浪费if一大堆了
                //pair是个好东西
                if(grid[x][y]==1){
                    grid[x][y]=2;
                    q.push(make_pair(x,y));
                }
            }
        }
    }
    for(int i=0;i<grid.size();i++){
            for(int j=0;j<grid[0].size();j++){
                //if(grid[i][j]!=0) count++;
                if(grid[i][j]==1)
                return -1;      
            }
        }
    return time-1;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43255713/article/details/105524634