博客
关于我
leetcode题解200-岛屿数量
阅读量:790 次
发布时间:2023-01-31

本文共 1223 字,大约阅读时间需要 4 分钟。

为了找到给定二维网格中的岛屿数量,我们可以使用深度优先搜索(DFS)来解决这个问题。以下是详细的解决方案:

方法概述

我们可以通过将每个网格中的'1'视为图中一个节点来看待问题。每个节点与其上下左右相邻的'1'节点通过边连接。我们的任务是找出连通的节点组成的岛屿数量,每个岛屿都是连通的区域,被水包围。

使用DFS的思路是:

  • 遍历网格中的每一个网格单元。
  • 当遇到一个未被访问的'1'时,启动一次DFS遍历。
  • 在DFS过程中,标记所有属于当前岛屿的'1',避免重复处理。
  • 每完成一次DFS,就意味着找到了一个岛屿,计数器增加一次。
  • 最终,计数器即为岛屿的数量。
  • 解决代码

    = 0 && $grid[$i-1][$j] == '1' && !$visited[$i-1][$j]) { $visited[$i-1][$j] = true; dfs($i-1, $j, $grid, $visited); } // 下方向 if ($i + 1 < $rows && $grid[$i+1][$j] == '1' && !$visited[$i+1][$j]) { $visited[$i+1][$j] = true; dfs($i+1, $j, $grid, $visited); } // 左方向 if ($j - 1 >= 0 && $grid[$i][$j-1] == '1' && !$visited[$i][$j-1]) { $visited[$i][$j-1] = true; dfs($i, $j-1, $grid, $visited); } // 右方向 if ($j + 1 < $cols && $grid[$i][$j+1] == '1' && !$visited[$i][$j+1]) { $visited[$i][$j+1] = true; dfs($i, $j+1, $grid, $visited); }}return $islands;

    代码解释

  • 初始化变量:我们创建了一个$visited数组来记录每个网格单元是否被访问过。初始化行数和列数,用于遍历网格。
  • 主遍历循环:遍历网格的每个单元格。对于每个单元格,如果单元格值为'1'且未被访问过,启动一次DFS。
  • DFS函数:递归函数用于探索当前单元格及其所有相连的'1'单元格。每次递归调用处理四个方向(上、下、左、右)的相邻单元格。
  • 访问标记:在进入相邻单元格时,先检查是否越界,并确保单元格为'1'且未被访问过,完成后将该单元格标记为已访问以避免重复处理。
  • 通过这种方法,我们可以有效地找到网格中的所有岛屿,并立即计数每个遍历的连通区域,从而得到最终的岛屿数量。

    转载地址:http://ehgyk.baihongyu.com/

    你可能感兴趣的文章
    leaflet图标跳动(leaflet篇.45)
    查看>>
    leaflet地图无级别缩放(移动端)(leaflet篇.76)
    查看>>
    leaflet多边形空间查询(ElasticSearch技术实现)(leaflet篇.52)
    查看>>
    leaflet实现wms服务面要素可点击(leaflet篇.30)
    查看>>
    Leaflet快速入门与加载OSM显示地图
    查看>>
    leaflet接入geoserver发布的热力图服务(leaflet篇.29)
    查看>>
    leaflet接入土地资源(leaflet篇.55)
    查看>>
    leaflet接入天地图(经纬度投影256)(leaflet篇.24)
    查看>>
    leaflet点采集与点编辑(leaflet篇.5)
    查看>>
    leaflet聚合图(leaflet篇.11)
    查看>>
    leaflet聚合图(大数据版)(leaflet篇.19)
    查看>>
    leaflet自定义地图样式地图(插件实现)(leaflet篇.18)
    查看>>
    leaflet虚线(leaflet篇.60)
    查看>>
    leaflet蜂巢图(leaflet篇.15)
    查看>>
    leaflet轨迹线(leaflet篇.58)
    查看>>
    leaflet面采集与面编辑(leaflet篇.7)
    查看>>
    leaflet饼状图(leaflet篇.74)
    查看>>
    LeakCanary使用,案例静态Toast引起的内存泄漏
    查看>>
    Leapin' Lizards
    查看>>
    learn c++(vector and array)
    查看>>