bfs O(mn) time O(mn) space
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
   | class Solution { public:     void wallsAndGates(vector<vector<int>>& rooms) {         if (rooms.empty() || rooms[0].empty()) return;         int m = rooms.size(), n = rooms[0].size();         queue<pair<int, int>> q;         for (int i = 0; i < m; ++i) {             for (int j = 0; j < n; ++j) {                 if (rooms[i][j] == 0) {                     q.emplace(i, j);                 }             }         }         int dr[] = {0, 0, 1, -1}, dc[] = {1, -1, 0, 0};         while (!q.empty()) {             auto [r, c] = q.front(); q.pop();             for (int j = 0; j < 4; ++j) {                 int rr = r + dr[j], cc = c + dc[j];                 if (rr < 0 || rr >= m || cc < 0 || cc >= n || rooms[rr][cc] != INT_MAX) continue;                 q.emplace(rr, cc);                 rooms[rr][cc] = rooms[r][c] + 1;              }         }     } };
  | 
 
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
   | class Solution { public:     void wallsAndGates(vector<vector<int>>& rooms) {         if (rooms.empty() || rooms[0].empty()) return;         int m = rooms.size(), n = rooms[0].size();         queue<pair<int, int>> q;         for (int i = 0; i < m; ++i) {             for (int j = 0; j < n; ++j) {                 if (rooms[i][j] == 0) {                     q.emplace(i, j);                 }             }         }         int dr[] = {0, 0, 1, -1}, dc[] = {1, -1, 0, 0};         int dist = 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 (rr < 0 || rr >= m || cc < 0 || cc >= n || rooms[rr][cc] != INT_MAX) continue;                     q.emplace(rr, cc);                     rooms[rr][cc] = dist;                  }             }             ++dist;         }     } };
  |