给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
示例 1:
输入:
0 0 0
0 1 0
0 0 0
输出:
0 0 0
0 1 0
0 0 0
示例 2:
输入:
0 0 0
0 1 0
1 1 1
输出:
0 0 0
0 1 0
1 2 1
注意:
给定矩阵的元素个数不超过 10000。
给定矩阵中至少有一个元素是 0。
矩阵中的元素只在四个方向上相邻: 上、下、左、右。
思路分析: 这是典型的图搜索问题,可以使用深度优先搜索、广度优先搜索来实现。
方法一:广度优先搜索。借助队列,先将所有为0的点放入队列,然后开始从各个0的位置向各个方向延伸。
class Solution {
public:
vector<int> rowSteps = {
-1, 1, 0, 0};//上下左右四个方向移动
vector<int> colSteps = {
0, 0, -1, 1};
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
int rowSize = matrix.size();
int colSize = matrix[0].size();
map<pair<int, int>, bool> visited;//标记是否
queue<pair<int, int>> myQue;//广度优先搜索辅助队列
//第一步:将所有为0的点放入队列
for (int row = 0; row < rowSize;