542. 01矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
1. 基于bfs算法的解法
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
int xlen = matrix.size();
int ylen = matrix[0].size();
// 定义上下左右方向
vector<vector<int>> dirs{{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
vector<vector<int>> output(xlen, vector<int>(ylen, 0));
vector<vector<int>> seen(xlen, vector<int>(ylen, 0));
queue<pair<int, int>> q;
for(int i = 0; i < xlen; i++) {
for(int j = 0; j < ylen; j++) {
if(matrix[i][j] == 0) {
q.push(pair<int, int>(i, j));
seen[i][j] = 1;
}
}
}
while(q.size()) {
auto [i, j] = q.front();
q.pop();
for(int c = 0; c < 4; c++) {
int ni = dirs[c][0] + i;
int nj = dirs[c][1] + j;
if(ni >= 0 && ni < xlen && nj >= 0 && nj < ylen && !seen[ni][nj]) {
output[ni][nj] = output[i][j] + 1;
q.push(pair<int, int>(ni, nj));
seen[ni][nj] = 1;
}
}
}
return output;
}