Leetcode 542 Solution

This article provides solution to leetcode question 542 (01-matrix)

https://leetcode.com/problems/01-matrix

Solution

class Solution { public: vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) { int m = matrix.size(); int n = matrix[0].size();
queue<pair<int, int>> q;
for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { if (matrix[i][j] == 0) q.push(make_pair((i << 16) + j, 0)); matrix[i][j] = -1; }
int filled = 0; int total = m * n; while (filled < total) { const auto& pt = q.front(); int i = pt.first >> 16; int j = pt.first & 0x0FFFF; int dist = pt.second; q.pop();
if (matrix[i][j] != -1) continue;
matrix[i][j] = dist; filled++;
if (i > 0 && matrix[i - 1][j] == -1) q.push(make_pair(((i - 1) << 16) + j, dist + 1));
if (i < m - 1 && matrix[i + 1][j] == -1) q.push(make_pair(((i + 1) << 16) + j, dist + 1));
if (j > 0 && matrix[i][j - 1] == -1) q.push(make_pair((i << 16) + j - 1, dist + 1));
if (j < n - 1 && matrix[i][j + 1] == -1) q.push(make_pair((i << 16) + j + 1, dist + 1)); }
return matrix; } };