class Solution {
public:
/*
0是土地,1是水
当遇到一个0,时判断其周围(上下左右)是否都是水1,如果都是则当前位置是一个封闭岛屿
如果某一方向还是0,不能说这不是一个封闭的岛,继续进行遍历,
如果走到边界还没有封闭,那这片区域不是封闭的岛
*/
int closedIsland(vector<vector<int>>& grid) {
int ret=0;
int m=grid.size();
int n=grid[0].size();
function<bool(int,int)> dfs=[&](int x,int y)->bool{
if(x<0||y<0||x>=m||y>=n)//遇到边界,返回false
return false;
if(grid[x][y]!=0)//该方向是封闭的
return true;
grid[x][y]=-1;//访问过的置-1,此扩展结点,周围还要继续判断
bool ret1=dfs(x-1,y),
ret2=dfs(x+1,y),
ret3=dfs(x,y-1),
ret4=dfs(x,y+1);
return ret1&&ret2&&ret3&&ret4;//上下左右都封闭
};//判断封闭岛屿
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(grid[i][j]==0 && dfs(i,j) )//当前节点,的dfs结果是true,说明是封闭
ret++;
return ret;
}
};
1254. 统计封闭岛屿的数目
最新推荐文章于 2024-10-03 13:36:06 发布
该代码实现了一个函数,通过深度优先搜索(DFS)在给定的二维网格中查找并计数封闭的岛屿。每个0表示土地,1表示水。一个封闭岛屿是指所有0被1包围,且没有通向边界其他0的路径。遍历每个节点,对每个未访问的0执行DFS,如果所有相邻节点都被标记为封闭,则增加计数。
摘要由CSDN通过智能技术生成