解题思路:
(1)dfs,每次遍历触碰到边界即为假
class Solution {
private:
int count=0;
bool flag=0;
public:
void dfs(vector<vector<int>> &vis,vector<vector<int>>&d,
vector<vector<int>>& grid,int x,int y,int m,int n) {
if(x==0 || y==0 || x==m-1 || y==n-1) {
flag=0;
return;
}
vis[x][y]=1;
for(int i=0;i<d.size();i++) {
int x1=x+d[i][0];
int y1=y+d[i][1];
if(x1>=0 && x1<m && y1>=0 && y1<n && vis[x1][y1]==0 && grid[x1][y1]==0)
dfs(vis,d,grid,x1,y1,m,n);
}
return;
}
int closedIsland(vector<vector<int>>& grid) {
int m=grid.size(),n=grid[0].size();
vector<vector<int>> vis(m,vector<int>(n,0));
vector<vector<int>> d={{1,0},{-1,0},{0,1},{0,-1}};
for(int i=1;i<grid.size()-1;i++) {
for(int j=1;j<grid[i].size()-1;j++) {
if(vis[i][j]==0 && grid[i][j]==0) {
flag=1;
dfs(vis,d,grid,i,j,m,n);
count+=flag;
}
}
}
return count;
}
};