Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell.
The distance between two adjacent cells is 1.
Example 1:
Input: [[0,0,0], [0,1,0], [0,0,0]] Output: [[0,0,0], [0,1,0], [0,0,0]]
Example 2:
Input: [[0,0,0], [0,1,0], [1,1,1]] Output: [[0,0,0], [0,1,0], [1,2,1]]
Note:
- The number of elements of the given matrix will not exceed 10,000.
- There are at least one 0 in the given matrix.
- The cells are adjacent in only four directions: up, down, left and right.
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 | class Solution { vector<vector<int>> dir; public: vector<vector<int>> updateMatrix(vector<vector<int>> &matrix) { dir.push_back(vector<int>{-1, 0}); dir.push_back(vector<int>{1, 0}); dir.push_back(vector<int>{0, -1}); dir.push_back(vector<int>{0, 1}); int m = matrix.size(), n = matrix[0].size(); queue<pair<int, int>> que; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (matrix[i][j] == 0) que.push(pair<int, int>(i, j)); else matrix[i][j] = INT_MAX; } } while (!que.empty()) { int i = que.front().first, j = que.front().second; que.pop(); for (auto d : dir) { int ii = i + d[0], jj = j + d[1]; if (ii >= 0 && ii < m && jj >= 0 && jj < n && matrix[ii][jj] > matrix[i][j] + 1) { matrix[ii][jj] = matrix[i][j] + 1; que.push(pair<int, int>(ii, jj)); } } } return matrix; } }; |
No comments:
Post a Comment