0093 泛洪填充之岛屿问题

这篇博客探讨了在二维网格中计算岛屿数量的问题,常见于LeetCode的题目,如1254、694和200。文章介绍了使用深度优先搜索(DFS)和广度优先搜索(BSF)的解决方案。通过DFS的例子详细解释了如何遍历网格,遇到1则视为陆地并继续搜索相邻陆地,同时为了避免死循环需要将已搜索过的陆地标记为0。遍历完成后,找到的岛屿数量即为答案。BSF的实现思路待后续介绍。
摘要由CSDN通过智能技术生成

泛洪填充常见于岛屿问题:

  • 1254.统计封闭岛屿的数目
  • 694.不同的岛屿数
  • 200.岛屿问题

解法三种:DFS,BSF,并查集
下面以200.岛屿问题解析泛洪填充的过程,题目描述:

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入: 11110 11010 11000 00000 输出: 1 示例 2:

输入: 11000 11000 00100 00011 输出: 3 解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

问题分析:以DFS思路为例,既然是要寻找岛屿个数(可以理解为连通域的个数),那就需要扫描整个网格图。对每个网格:

  • 为 1:该位置属于某个岛屿的一部分,如果对其扩展开来搜寻连通的区域,最终会触及到边界,那么确认完一个岛屿。其中对于确认是岛屿一部分的网格(为1),需要将其“下沉”,即修改为0,不然会出现兜圈子,死循环。这样每完成一次深度遍历,我们就找到一个岛屿,岛屿次数加一
  • 为 0:说明该网格处为水域,直接跳过不进行深度遍历。
    当全部遍历完后,就能得到岛屿的个数。

以下是DFS的实现代码:

package floodFill;

public class NumberOfIslands {
   
    public static void main(String[] args) {
   
        char[][] grid = new char[][]{
   
                {
   '1', '1', '1', '1', '0'},
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值