关键:转化为铺路的问题:
class Solution {
public:
void wallsAndGates(vector<vector<int>>& rooms) {
int row = rooms.size();
if(row == 0) {
return;
}
int col = rooms[0].size();
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(rooms[i][j] == 0){
dfs(rooms,i,j,row,col,0);
}
}
}
}
private:
void dfs(vector<vector<int>>& rooms,int i,int j,int row,int col,int dis) {
if(i<0 || i>= row || j<0 || j>=col || rooms[i][j] < dis) //包括重复铺路的过程,或者墙体。
return;
rooms[i][j] = dis;
dfs(rooms,i+1,j,row,col,dis+1);
dfs(rooms,i-1,j,row,col,dis+1);
dfs(rooms,i,j+1,row,col,dis+1);
dfs(rooms,i,j-1,row,col,dis+1);
}
};