在给定的网格中,每个单元格可以有以下三个值之一:
值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。
返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。
思路:
比较基础的BFS。建立一个队列存放腐烂橘子的位置,并记录新鲜橘子的个数。循环过程中若腐烂,则fresh--,且把刚被腐烂的橘子加入到队列中,每搜完一层将记录最短时间的变量min++。直到队列为空。最后判断fresh是否为0,如果不为零代表有橘子无法被腐烂,返回-1,反之返回min。
AC代码:时间复杂度O(mn)
class Solution {
public:
int orangesRotting(vector<vector<int>>& grid) {
int min=0,fresh=0;
queue<pair<int, int>> q;
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[0].size();j++){
if(grid[i][j]==1) fresh++;
else if(grid[i][j]==2) q.push({i,j});
}