给定一个由 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。
- 矩阵中的元素只在四个方向上相邻: 上、下、左、右。
/*动态规划从左上角到右下角一遍,从右下角到左上角一遍,那么(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; }