给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
从每个为“0”的坐标开始进行广度优先遍历
class Solution {
public:
typedef pair<int,int> PII;
static const int INF = 2e9;
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
int n = matrix.size(),m = matrix[0].size();
vector<vector<int>> vis(n,vector<int>(m,0));
if(n == 0 && m == 0) return matrix;
queue<PII> q;
for(int i = 0; i < n; ++i){
for(int j = 0;j < m; ++j){
if(matrix[i][j] == 0){
vis[i][j] = INF;
q.push({i,j});
}
}
}
int lay = 0;
while(q.size()){
int len = q.size();
while(len--){
int nx = q.front().first;
int ny = q.front().second;
q.pop();
matrix[nx][ny] = lay;
for(int i = 0; i < 4; ++i){
int cx = nx + dx[i],cy = ny + dy[i];
if(cx >= 0 && cx < n && cy >= 0 && cy < m && vis[cx][cy] != INF && matrix[cx][cy] != 0){
vis[cx][cy] = INF;
q.push({cx,cy});
}
}
}
lay++;
}
return matrix;
}