Leetcode 542. 01 矩阵 C++

Leetcode 542. 01 矩阵

题目

给定一个由 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

注意:

  1. 给定矩阵的元素个数不超过 10000。
  2. 给定矩阵中至少有一个元素是 0。
  3. 矩阵中的元素只在四个方向上相邻: 上、下、左、右。

题解

bfs
我们从每个元素为0的位置进行bfs,从而确定非零元素到最近的0的距离。详细过程见代码

代码

	vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
        int m = matrix.size(),n=matrix[0].size();
        vector<vector<int>> ans(m,vector<int>(n,-1));		//用-1表明还没有拜访过
        queue<pair<int,int>> q;
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                if(matrix[i][j] == 0){			//将0元素放到队列中
                    q.push(make_pair(i,j));
                    ans[i][j] = 0;
                }   
            }
        }
        int dir[4][2] = {
            {-1,0},{0,1},{1,0},{0,-1}
        };
        int step = 0,size;
        while(!q.empty()){		//bfs
            size = q.size();
            step++;
            while(size--){
                pair<int,int> now = q.front();
                q.pop();
                for(int i=0; i<4; i++){
                    if(now.first+dir[i][0]>=0 && now.first+dir[i][0]<m && now.second+dir[i][1]>=0 && now.second+dir[i][1]<n && ans[now.first+dir[i][0]][now.second+dir[i][1]]==-1){
                        q.push(make_pair(now.first+dir[i][0],now.second+dir[i][1]));
                        ans[now.first+dir[i][0]][now.second+dir[i][1]] = step;
                    }       
                }
            }
        }
        return ans;
    }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/01-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(Leetcode 542. 01 矩阵 C++)