解題思路
看出來是 BFS 後,就很好解了。
程式碼
struct P {
int x;
int y;
};
class Solution {
public:
int orangesRotting(vector<vector<int>>& grid) {
queue<P> q1, q2;
int minute = 0, dx[4] = {-1, 0, 0, 1}, dy[4] = {0, -1, 1, 0};
for(int i=0; i<grid.size(); i++)
{
for(int j=0; j<grid[i].size(); j++)
{
if(grid[i][j] == 2)
q1.push({i, j});
}
}
while(true)
{
while(!q1.empty())
{
for(int i=0; i<4; i++)
{
int newX = q1.front().x+dx[i], newY = q1.front().y+dy[i];
if(0 <= newX && newX < grid.size() && 0 <= newY && newY < grid[0].size() && grid[newX][newY] == 1)
{
q2.push({newX, newY});
grid[newX][newY] = 2;
}
}
q1.pop();
}
minute += 1;
if(q2.empty()) break;
swap(q1, q2);
}
for(int i=0; i<grid.size(); i++)
for(int j=0; j<grid[i].size(); j++)
if(grid[i][j] == 1)
return -1;
return minute - 1;
}
};
沒有留言:
張貼留言