classSolution { public: staticconstexprint dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; vector<vector<int>> res; int m, n;
vector<vector<int>> updateMatrix(vector<vector<int>>& mat) { m = mat.size(); n = mat[0].size(); res.resize(m, vector<int>(n, INT_MAX)); queue<pair<int, int>> q; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (mat[i][j] == 0) { res[i][j] = 0; q.push({i, j}); } } } int cur = 1; while (!q.empty()) { int size = q.size(); for (int i = 0; i < size; i++) { auto [x, y] = q.front(); q.pop(); for (int k = 0; k < 4; k++) { int dx = x + dirs[k][0], dy = y + dirs[k][1]; if (dx >= 0 && dx < m && dy >= 0 && dy < n && res[dx][dy] == INT_MAX) { res[dx][dy] = cur; q.push({dx, dy}); } } } cur++; }