在给定的?m x n
?网格?grid
?中,每个单元格可以有以下三个值之一:
0
?代表空单元格;1
?代表新鲜橘子;2
?代表腐烂的橘子。每分钟,腐烂的橘子?周围?4 个方向上相邻?的新鲜橘子都会腐烂。
返回?直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回?-1
?。
示例 1:
输入:grid = [[2,1,1],[1,1,0],[0,1,1]] 输出:4
示例 2:
输入:grid = [[2,1,1],[0,1,1],[1,0,1]] 输出:-1 解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。
示例 3:
输入:grid = [[0,2]] 输出:0 解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 10
grid[i][j]
?仅为?0
、1
?或?2
?
?int orangesRotting(vector<vector<int>>& grid) {
? ? ? ? int row=grid.size();
? ? ? ? int col = grid[0].size();
? ? ? ? vector<vector<bool>>visited(row,vector<bool>(col,false));
? ? ? ? queue<pair<int,int>>que;
? ? ? ? int ret=0;
? ? ? ? for(int i=0;i<row;i++)
? ? ? ? {
? ? ? ? ? ? for(int j=0;j<col;j++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(grid[i][j]==2)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? que.push(pair<int,int>(i,j));
? ? ? ? ? ? ? ? ? ? visited[i][j]=true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? ?
? ? ? ? while(!que.empty())
? ? ? ? {
? ? ? ? ? ? queue<pair<int,int>>queTmp;
? ? ? ? ? ? while(!que.empty())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? pair<int,int>f = que.front();
? ? ? ? ? ? ? ? que.pop();
? ? ? ? ? ? ? ? if(f.first-1>=0 && visited[f.first-1][f.second]==false && grid[f.first-1][f.second]==1)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? queTmp.push(pair<int,int>(f.first-1,f.second));
? ? ? ? ? ? ? ? ? ? visited[f.first-1][f.second]=true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(f.first+1<row && visited[f.first+1][f.second]==false&& grid[f.first+1][f.second]==1 )
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? queTmp.push(pair<int,int>(f.first+1,f.second));
? ? ? ? ? ? ? ? ? ? visited[f.first+1][f.second]=true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(f.second-1>=0 && visited[f.first][f.second-1]==false&& grid[f.first][f.second-1]==1)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? queTmp.push(pair<int,int>(f.first,f.second-1));
? ? ? ? ? ? ? ? ? ? visited[f.first][f.second-1]=true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(f.second+1<col && visited[f.first][f.second+1]==false&& grid[f.first][f.second +1 ]==1)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? queTmp.push(pair<int,int>(f.first,f.second+1));
? ? ? ? ? ? ? ? ? ? visited[f.first][f.second+1]=true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? que=queTmp;
? ? ? ? ? ? ret++;
? ? ? ? }
? ? ? ? ? for(int i=0;i<row;i++)
? ? ? ? {
? ? ? ? ? ? for(int j=0;j<col;j++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(grid[i][j]==1 && visited[i][j]==false)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ?return -1;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if(ret==0)
? ? ? ? {
? ? ? ? ? ? return 0;
? ? ? ? }
? ? ? ? return ret-1;
? ? }