题解 | #腐烂的苹果#
腐烂的苹果
https://www.nowcoder.com/practice/54ab9865ce7a45968b126d6968a77f34
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param grid int整型vector<vector<>> * @return int整型 */ int rotApple(vector<vector<int> >& grid) { // write code here int n = grid.size(), m = grid[0].size(); queue<pair<int, int>> q; int fresh = 0, minutes = 0; // 初始化队列和统计完好苹果 for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (grid[i][j] == 2) { q.push({i, j}); } else if (grid[i][j] == 1) { fresh++; } } } // 方向数组,用于表示上下左右四个方向 vector<pair<int, int>> directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; // BFS while (!q.empty() && fresh > 0) { int size = q.size(); for (int i = 0; i < size; ++i) { auto [x, y] = q.front(); q.pop(); for (auto& dir : directions) { int nx = x + dir.first, ny = y + dir.second; if (nx >= 0 && nx < n && ny >= 0 && ny < m && grid[nx][ny] == 1) { grid[nx][ny] = 2; q.push({nx, ny}); fresh--; } } } minutes++; } return fresh == 0 ? minutes : -1; } };