题意
给一个01矩阵,要求对于矩阵中的每一个格子找到离它最近的0的距离
思路
首先,对于为0的格子,距离就为0
然后对于为1的格子,可用它的上下左右四个格子去松弛
所以做一遍BFS就好
代码
struct node {
int x, y, step;
node() {}
node(int a, int b, int c) : x(a), y(b), step(c) {
}
};
class Solution {
private:
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
public:
vector<vector<int>> updateMatrix(vector<vector<int>>& a) {
int m = a.size(), n = a[0].size();
queue<node> q;
vector<vector<int>> res(m, vector<int>(n, INT_MAX));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (!a[i][j]) {
res[i][j] = 0;
q.push(node(i, j, 0));
}
}
}
while (!q.empty()) {
node t = q.front(); q.pop();
for (int i = 0; i < 4; i++) {
int x = t.x + dx[i], y = t.y + dy[i];
if (x >= 0 && x < m && y >= 0 && y < n && a[x][y] && res[x][y] > t.step + 1) {
res[x][y] = t.step + 1;
q.push(node(x, y, res[x][y]));
}
}
}
return res;
}
};