Advertisement
Rohit4Pal

Untitled

Aug 1st, 2021
1,299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. class Solution {
  2.     int m,n;
  3.     int row[4]={1,-1,0,0};
  4.     int col[4]={0,0,1,-1};
  5. public:
  6.     vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {
  7.        
  8.         m=mat.size(),n=mat[0].size();
  9.         vector<vector<int>> res(m,vector<int>(n,-1));
  10.         vector<vector<bool>> visited(m,vector<bool>(n,false));
  11.        
  12.         for(int i=0;i<m;i++){
  13.             for(int j=0;j<n;j++){
  14.                 visited[i][j]=true;
  15.                 disFromNearestZero(mat,i,j,res,visited);
  16.                 visited[i][j]=false;
  17.             }
  18.         }
  19.         return res;
  20.     }
  21.    
  22.     int disFromNearestZero(vector<vector<int>>& mat,int i,int j,vector<vector<int>> &res,vector<vector<bool>> &visited){
  23.        
  24.         //base case
  25.         if(res[i][j] != -1)     return res[i][j];
  26.         if(mat[i][j]==0)        {res[i][j]=0;return 0;}
  27.            
  28.         int minDis=INT_MAX;
  29.         for(int k=0;k<4;k++){
  30.            
  31.             int x=i+row[k],y=j+col[k];
  32.             if(isValid(x,y) && !visited[x][y]){
  33.                 visited[x][y]=true;
  34.                 minDis=min(minDis, 1+disFromNearestZero(mat,x,y,res,visited));
  35.                 visited[x][y]=false;
  36.             }
  37.         }
  38.         res[i][j]=minDis;                  
  39.         return minDis;
  40.     }
  41.     bool isValid(int i,int j){
  42.         return i>=0 && j>=0 && i<m && j<n;
  43.     }
  44. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement