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 41 42 43 44 45 46 47 48
| class Solution { public: int maxDistance(vector<vector<int>>& grid) { N = grid.size(); queue<pair<int, int>> q; for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { if (j > 0 && grid[i][j - 1] == 0 && grid[i][j] == 1) { q.emplace(i, j); } if (j + 1 < N && grid[i][j] == 1 && grid[i][j + 1] == 0) { q.emplace(i, j); } } } for (int j = 0; j < N; ++j) { for (int i = 0; i < N; ++i) { if (i > 0 && grid[i - 1][j] == 0 && grid[i][j] == 1) { q.emplace(i, j); } if (i + 1 < N && grid[i][j] == 1 && grid[i + 1][j] == 0) { q.emplace(i, j); } } } int res = -1; while (!q.empty()) { for (int i = q.size(); i > 0; --i) { auto [r, c] = q.front(); q.pop(); for (int j = 0; j < 4; ++j) { int rr = r + dr[j], cc = c + dc[j]; if (isInBound(rr, cc) && grid[rr][cc] == 0) { grid[rr][cc] = 2; q.emplace(rr, cc); } } } ++res; } return res; }
bool isInBound(int r, int c) { return 0 <= r && r < N && 0 <= c && c < N; }
int N, dr[4] = {1, -1, 0, 0}, dc[4] = {0, 0, 1, -1}; };
|