class Solution { public: vector<vector<int>> updateMatrix(vector<vector<int>>& mat) { int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; int n=mat.size(); int m=mat[0].size(); vector<vector<int>> ans(n, vector<int> (m, INT_MAX/2)); vector<vector<int>> vis(n, vector<int> (m,0)); queue<pair<int,int>> q; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(mat[i][j]==0){ q.emplace(i,j); ans[i][j]=0; } } } while(!q.empty()){ auto [x,y]=q.front(); q.pop(); vis[x][y]=1; int d=ans[x][y]+1; for(int k=0;k<4;k++){ int i=x+dx[k],j=y+dy[k]; if(i>=0&&i<n&&j>=0&&j<m&&vis[i][j]==0){ ans[i][j] = min(ans[i][j],d); q.emplace(i,j); } } } return ans; } };