题意:给你一个二维数组,0表示空,1表示新鲜橘子,2表示烂橘子。没过一分钟,烂橘子会是周围四个相邻的橘子变烂,请问最少多少分钟,使得所有的橘子都变烂。如果不能变烂,返回-1。
思路:简单BFS。看数据比较小,直接暴力模拟了一发。
class Solution {
public:
int orangesRotting(vector<vector<int>>& grid) {
int xx[4] = { 0, 0, 1, -1 };
int yy[4] = { 1, -1, 0, 0 };
int n = grid.size();
int m = grid[0].size();
vector<vector<int>> new_grid;
int ans = 0;
while (1)
{
new_grid = grid;
for (int i = 0; i<n; i++)
for (int j = 0; j<m; j++)
if (grid[i][j] == 2)
for (int k = 0; k<4; k++)
{
int x = i + xx[k];
int y = j + yy[k];
if (x >= 0 && x<n && y >= 0 && y<m)
if (new_grid[x][y] == 1)
new_grid[x][y] = 2;
}
if (new_grid == grid)
break;
ans++;
grid = new_grid;
}
for (int i = 0; i<n; i++)
for (int j = 0; j<m; j++)
if (grid[i][j] == 1)
return -1;
return ans;
}
};