[bfs]leetcode994:腐爛的橘子(easy)

題目:

994. 腐爛的橘子

題解:

  • bfs模板題
  • 與層序遍歷思想類試,不過將添加一層的每個節點添加左右子節點轉換爲一層每個節點添加4個方向的節點而已,代碼實現也與層序遍歷類試,屬於bfs的模板提。

代碼如下:

int dx[]={0,-1,0,1},dy[]={-1,0,1,0};

class Solution {
public:
    int orangesRotting(vector<vector<int>>& grid) {
        int m=grid.size(),n=grid[0].size();
        int res=0;
        queue<pair<int,int>> q;
        for(int i=0;i<m;++i)for(int j=0;j<n;++j)if(grid[i][j]==2)q.push({i,j});
        while(!q.empty()){
            int span=q.size();
            for(int i=0;i<span;++i){
                pair<int,int> p=q.front();q.pop();
                for(int j=0;j<4;++j){
                    int x=p.first+dx[j],y=p.second+dy[j];
                    if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==1){
                        grid[x][y]=2;
                        q.push({x,y});
                    }
                }
            }
            if(!q.empty())res++;//感染完一圈的橘子,res+1
        }
        for(int i=0;i<m;++i)for(int j=0;j<n;++j)if(grid[i][j]==1)return -1;
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章