基本思想:
联通块,直接填海造陆;
总体代码:
class Solution {
public:
void dfs(vector<vector<int>>& grid,int m,int n,int x,int y){
if(x<0||x>=m||y<0||y>=n||grid[x][y]!=0)
return;
grid[x][y]=1;
dfs(grid,m,n,x+1,y);
dfs(grid,m,n,x-1,y);
dfs(grid,m,n,x,y+1);
dfs(grid,m,n,x,y-1);
}
int closedIsland(vector<vector<int>>& grid) {
int m=grid.size();
int n=grid[0].size();
for(int i=0;i<m;i++){
dfs(grid,m,n,i,0);
dfs(grid,m,n,i,n-1);
}
for(int i=0;i<n;i++){
dfs(grid,m,n,0,i);
dfs(grid,m,n,m-1,i);
}
int cnt=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(grid[i][j]==0){
dfs(grid,m,n,i,j);
cnt++;
}
}
}
return cnt;
}
};