class Solution {
public:
int orangesRotting(vector<vector<int>>& grid) {
std::queue<std::pair<int, int>> qe;
int fresh = 0;
for (int i=0; i<grid.size(); i++) {
for (int j=0; j<grid[i].size(); j++) {
if (grid[i][j]==2) qe.push({i,j});
else if (grid[i][j] == 1) fresh++;
}
}
int count = 0;
std::vector<std::pair<int, int>> dirts{{-1,0}, {1,0}, {0,1}, {0,-1}};
while(!qe.empty()) {
int size = qe.size();
bool flag = false;
while(size>0){
auto pair = qe.front();
qe.pop();
for (auto direct: dirts) {
int i = pair.first + direct.first;
int j = pair.second + direct.second;
if (i>=0 && i<grid.size() && j>=0 && j<grid[0].size() && grid[i][j] == 1) {
grid[i][j] = 2;
qe.push({i,j});
fresh--;
flag = true;
}
}
size--;
}
if (flag) count++;
}
return fresh ? -1 : count;
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40