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. 矩阵中的元素只在四个方向上相邻: 上、下、左、右。
/*动态规划从左上角到右下角一遍,从右下角到左上角一遍,那么(i,j)处的元素一定是上下左右中最小的元素+1*/ 
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) { int m=matrix.size(); int n=matrix[0].size(); vector<vector<int>> dp(m,vector<int>(n,10010)); for(int i=0;i<m;i++) for(int j=0;j<n;j++){ if(matrix[i][j]==0)dp[i][j]=0; } for(int i=0;i<m;i++) for(int j=0;j<n;j++){ if(i>0) dp[i][j]=min(dp[i][j],dp[i-1][j]+1); if(j>0) dp[i][j]=min(dp[i][j],dp[i][j-1]+1); } for(int i=m-1;i>=0;i--) for(int j=n-1;j>=0;j--){ if(i<m-1) dp[i][j]=min(dp[i][j],dp[i+1][j]+1); if(j<n-1) dp[i][j]=min(dp[i][j],dp[i][j+1]+1); } return dp; }
原文地址:https://www.cnblogs.com/Dancing-Fairy/p/12704321.html