【3月打卡】Leetcode-994 腐爛的橘子

人是會成長的生物。
終於我也從不會寫BFS和DFS,變成一個沒有感情的遍歷矩陣機器

多源廣度優先搜索

num表示橘子數(腐爛+新鮮)。
用size=que.size();限制同一層次(分鐘)的腐爛橘子,用於控制時間
最後一層的橙子已經腐爛完畢,遍歷它的四周也沒有增長,故minute-1

class Solution {
public:
    int orangesRotting(vector<vector<int>>& grid) {
        vector<int> dx={-1,1,0,0};
        vector<int> dy={0,0,-1,1};
        queue<vector<int>> que;
        int minute=0,num=0;
        int x,y;
        for(int i=0;i<grid.size();i++)
        {
           for(int j=0;j<grid[i].size();j++) 
           {
               if(grid[i][j]!=0)
                    num++;
               if(grid[i][j]==2)
                    que.push({i,j});
           }
        }
        if(num==0) return 0;
        while(!que.empty())
        {
            int size=que.size();
            for(int i=0;i<size;i++)
            {
               vector<int> tmp=que.front();
               que.pop();
               num--;  
               for(int k=0;k<4;k++)
               {               
                    x=tmp[0]+dx[k];
                    y=tmp[1]+dy[k];
                   if(x>=0&&x<grid.size()&&y>=0&&y<grid[0].size()&&grid[x][y]==1)
                    {
                        grid[x][y]=2;
                        que.push({x,y});
                    }
               } 
            }
            minute++;
        }
        return num==0?minute-1:-1;   
    }
};

附錄:多源bfs框架
多源BFS框架(學習鏈接)

level = 0
while queue 不空:
    size = queue.size()
    while (size --) {
        cur = queue.pop()
        for 節點 in cur的所有相鄰節點:
            if 該節點有效且未被訪問過:
                queue.push(該節點)
    }
    level ++;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章