有一个二维矩阵 gridgridgrid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 )。

我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」。

如果一座岛屿 完全 由水域包围,即陆地边缘上下左右所有相邻区域都是水域,那么我们将其称为 「封闭岛屿」。

请返回封闭岛屿的数目。

示例 1:

输入:grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]]
输出:2
解释:
灰色区域的岛屿是封闭岛屿,因为这座岛屿完全被水域包围(即被 1 区域包围)。

示例 2:

输入:grid = [[0,0,1,0,0],[0,1,0,1,0],[0,1,1,1,0]]
输出:1

示例 3:

输入:grid = [[1,1,1,1,1,1,1],
\space  \space  \space  \space  \space  \space  \space  \space  \space  \space  \space  [1,0,0,0,0,0,1],
\space  \space  \space  \space  \space  \space  \space  \space  \space  \space  \space  [1,0,1,1,1,0,1],
\space  \space  \space  \space  \space  \space  \space  \space  \space  \space  \space  [1,0,1,0,1,0,1],
\space  \space  \space  \space  \space  \space  \space  \space  \space  \space  \space  [1,0,1,1,1,0,1],
\space  \space  \space  \space  \space  \space  \space  \space  \space  \space  \space  [1,0,0,0,0,0,1],
\space  \space  \space  \space  \space  \space  \space  \space  \space  \space  \space  [1,1,1,1,1,1,1]]
输出:2

提示:

  • 1 <= grid.length, grid[0].length <= 100
  • 0 <= grid[i][j] <=1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-closed-islands
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————
解题思路:采用深度优先遍历,对于每一个陆地,设定一个标记label,通过遍历染色,将所有相邻的陆地标记为相同的label,如果遍历到边界位置,则该岛屿不是封闭岛屿。

class Solution {public:int h = 0;  # 用于存储矩阵的行数int l = 0;  # 用于存储矩阵的列数int hh[4] = {-1,0,1,0};  # 建立一个数组,用于行进行上下左右的位移int ll[4] = {0,1,0,-1};  # 建立一个数组,用于列上下左右的位移void dfs(vector<vector<int>>& g,int i,int j,int& flag)  # 深度遍历函数{g[i][j] = -1;  # 将陆地的颜色(label)标记为-1  for(int k=0;k<4;k++)  # 遍历该陆地的上下左右四个位置的情况{int hx = i + hh[k];  # 使用上面定义的数组的四个值进行行位移操作int ly = j + ll[k];  # 使用上面定义的数组的四个值进行列位移操作if(hx>=0 && hx<h && ly>=0 &&ly<l && !g[hx][ly])  # 看位移之后的位置是否在矩阵中{if(hx==0||hx==h-1||ly==0||ly==l-1)  # 判断陆地位置是否在边界位置flag=0;  # 如果陆地在边界位置,则不可能是封闭岛屿dfs(g,hx,ly,flag);  #对现在岛屿位置的点做深度遍历}}}int closedIsland(vector<vector<int>>& g) {int sum = 0;  # 用于存储封闭岛屿的数量h = g.size();  # 计算矩阵的行数l = g[0].size();   # 计算矩阵的列数for(int i=1;i<h-1;++i)  # 遍历矩阵中的每个点,判断是否是陆地,因为边界上的陆地不可能是封闭岛屿,所以跳过最外圈{for(int j=1;j<l-1;++j){if(!g[i][j])  # 如果是岛屿,则进行深度遍历{int flag = 1;  # 作为该陆地块是否是封闭岛屿的判断条件dfs(g,i,j,flag);  # 对该点进行深度遍历sum += flag;  计算以该点为起始点的陆地块是否是封闭岛屿进行相加}}}return sum;}
};

leetcode - 统计封闭岛屿的数目相关推荐

  1. LeetCode 1254. 统计封闭岛屿的数目(图的BFS DFS)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往 ...

  2. 【LeetCode - 1254】统计封闭岛屿的数目(dfs,连通块)

    题目链接:https://leetcode-cn.com/problems/number-of-closed-islands/ 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域 ...

  3. C++算法学习(力扣:1254. 统计封闭岛屿的数目)

    有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」 ...

  4. leetcode1254. 统计封闭岛屿的数目(dfs)

    有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」 ...

  5. 【LeetCode】岛屿(周长、数量、最大面积、封闭岛屿数)

    文章目录 岛屿的周长★ 岛屿数量★★ 岛屿数量Ⅱ★★★ 岛屿的最大面积★★ 统计封闭岛屿的数目★★ 岛屿的周长★ LeetCode463. 岛屿的周长 [题目]给定一个 row x col 的二维网格 ...

  6. LeetCode 1905. 统计子岛屿

    LeetCode 1905. 统计子岛屿 题目 思路 代码 题目 链接: https://leetcode.cn/problems/count-sub-islands/ 给你两个 m x n 的二进制 ...

  7. LeetCode 1905. 统计子岛屿(BFS)

    文章目录 1. 题目 2. 解题 1. 题目 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地). 一个 岛屿 是由 四个方向 (水平或 ...

  8. 【深度优先搜索】leetcode 1905. 统计子岛屿

    1905. 统计子岛屿 文章目录 题目描述 示例1: 示例2: 提示 方法:深度优先搜索 解题思路 代码 复杂度分析 题目描述 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只 ...

  9. LeetCode每日一题——1684. 统计一致字符串的数目

    LeetCode每日一题系列 题目:1684. 统计一致字符串的数目 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个由不同字符组成的字符串 allowed ...

最新文章

  1. uiswitchbutton 点击不改变状态_Redux 包教包会(一):解救 React 状态危机
  2. Redis实现广告缓存、并完善缓存击穿
  3. 数据结构:复杂度分析以及数据结构整体概览
  4. 基于FPGA的AFDX接口实现
  5. 基于小波和插值的超分辨率图像重建算法
  6. 类与接口(四)方法重载解析
  7. Vue多字段下的非空判断(new Promise)
  8. Kafka : 查看kafka topic的消息offset范围
  9. 纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
  10. MongoDB高级查询详细
  11. android 当手柄打游戏,玩手游需不需要配手柄?谈移动游戏外设的三个机会
  12. 【ISO】Windows10系统ISO镜像怎么从微软官网下载?
  13. springdata jpa in查询
  14. php base64 转 amr,base64转amr文件
  15. 阿里P8亲自教你!Android高级工程师进阶学习,全套教学资料
  16. Mysql数据库存储ip地址
  17. 2021高考成绩查询微信预约推送,2021高考微信推送文案内容
  18. 尼康d850相机参数测试软件,尼康(Nikon)D850 单机数码相机宽容度评测-ZOL中关村在线...
  19. 程序人生:为什么现在的年轻人看不到希望?
  20. layui批量获取复选框的值

热门文章

  1. Oracle备份与恢复 expdp/impdp数据泵远程导入导出
  2. Tomcat 比 nio 、aio性能更好的apr介绍
  3. Redis面试 - 哨兵集群实现高可用
  4. 看完这篇你们团队的代码也很规范
  5. leetcode 加一
  6. C#LeetCode刷题-回溯算法
  7. C#LeetCode刷题之#53-最大子序和(Maximum Subarray)
  8. python之父子进程间通信
  9. python @符号_Python金三角!python初学者很难绕过的坑,附教程资料
  10. steam夏日促销悄然开始,用Python爬取排行榜上的游戏打折信息