994.Rotting Oranges

Last updated

Last updated
输入:[[2,1,1],[1,1,0],[0,1,1]]
输出:4
示例 2:
输入:[[2,1,1],[0,1,1],[1,0,1]]
输出:-1
解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。
示例 3:
输入:[[0,2]]
输出:0
解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。
提示:
1 <= grid.length <= 10
1 <= grid[0].length <= 10
grid[i][j] 仅为 0、1 或 2class Solution {
bool can=true;
int getCount(vector<vector<int>>& grid)
{
bool flag=true;
bool other=false;
for(int i=1;i< grid.size()-1;i++)
{
for(int j=1;j<grid[0].size()-1;j++)
{
if(grid[i][j] ==1 && (grid[i][j+1]==2 || grid[i+1][j] ==2 || grid[i-1][j] ==2 || grid[i][j-1] ==2 ))
{
grid[i][j]=-1;
flag=false;
}
}
}
for(int i=0;i< grid.size();i++)
{
for(int j=0;j<grid[0].size();j++)
{
if(grid[i][j] ==-1) grid[i][j]=2;
if(grid[i][j]==1) other=true;
}
}
if(flag )
{
if(other) can=false;
return 0;
}
return 1+getCount(grid);
}
public:
int orangesRotting(vector<vector<int>>& grid) {
vector<vector<int>>Lgrid(grid.size()+2,vector<int>(grid[0].size()+2,0));
for(int i=1;i<Lgrid.size()-1;i++)
for(int j=1;j<Lgrid[0].size()-1;j++)
Lgrid[i][j]=grid[i-1][j-1];
int res= getCount(Lgrid);
return can?res:-1;
}
};