1. 题目描述
Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell.
The distance between two adjacent cells is 1.
Example 1:
Input:
0 0 0
0 1 0
0 0 0
Output:
0 0 0
0 1 0
0 0 0
2.代码
提示:常规的BFS
class Solution {
public:
vector<vector<int> > updateMatrix(vector<vector<int> >& matrix) {
int rows = matrix.size();
int cols = matrix[0].size();
vector<vector<int> > res(rows, vector<int>(cols, 0));
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
if(matrix[i][j] == 1) {
bfs(matrix, i, j, res);
}
}
}
return res;
}
void bfs(vector<vector<int> >& matrix, int i, int j, vector<vector<int> >& res) {
int rows = matrix.size();
int cols = matrix[0].size();
queue<pair<int,int>> q;
q.push(make_pair(i,j));
int level = 0;
while(!q.empty()) {
level++;
for(int n = q.size(); n > 0; n--) {
pair<int,int> tmp = q.front();
q.pop();
int x = tmp.first;
int y = tmp.second;
if(x-1 >= 0) {
if(matrix[x-1][y] == 0) {
res[i][j] = level;
return;
} else {
q.push(make_pair(x-1,y));
}
}
if(x+1 < rows) {
if(matrix[x+1][y] == 0) {
res[i][j] = level;
return;
} else {
q.push(make_pair(x+1,y));
}
}
if(y-1 >= 0) {
if(matrix[x][y-1] == 0) {
res[i][j] = level;
return;
} else {
q.push(make_pair(x,y-1));
}
}
if(y+1 < cols) {
if(matrix[x][y+1] == 0) {
res[i][j] = level;
return;
} else {
q.push(make_pair(x,y+1));
}
}
}
}
}
};
联系邮箱:sysuygm@163.com
欢迎赐教!