当前位置: 首页 > news >正文

LintCode第433题-岛屿的个数

描述

给一个 01 矩阵,求不同的岛屿的个数。

0 代表海,1 代表岛,如果两个 1 相邻,那么这两个 1 属于同一个岛。我们只考虑上下左右为相邻

样例 1:

输入:
[[1,1,0,0,0],[0,1,0,0,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,0,0,1]
]
输出:
3

样例 2:

输入:
[[1,1]
]
输出:
1

思路:先判断用什么方法解题

规则的二维网格结构-有相邻规则-统计连通块,最短路径,区域面积等 访问一个点后要访问所有相邻且符合条件的点-本质是图的遍历

通常情况下 最短路径以及数据量非常大用BFS 只需要遍历连通块通常情况DFS就可以了

易错点:容易将条件判断为上下左右不是1才会计数-这只会数“孤岛像素”,和“岛屿个数”不是一回事

代码如下:

public class Solution {

    // 上、下、左、右(顺序固定)

    private static final int[] DR = {-1, 1, 0, 0};

    private static final int[] DC = {0, 0, -1, 1};

    /**

     * @param grid: a boolean 2D matrix (true=陆地, false=海)

     * @return: 岛屿数量

     */

    public int numIslands(boolean[][] grid) {

        if (grid == null || grid.length == 0 || grid[0].length == 0) return 0;

        int m = grid.length, n = grid[0].length;//因为这里的岛屿不为锯齿状即规则二维数组 所以可以用grid[0].length计算出来所有的列都为这个值

        int count = 0;

        for(int r=0;r<m;r++)

        {

            for(int c=0;c<n;c++)

            {

                if(grid[r][c])//首次遇见一个小岛

                {

                    count++;

                    dfsSurroundIsland(grid,r,c);//去掉整块(标记为已访问 条件就是相邻的岛屿就是一整块)

                }

            }

        }

        return count;

    }

    private void dfsSurroundIsland(boolean[][] g, int r, int c)//消灭上下邻接重复的岛屿 这一片岛屿只算1次

     {

         //边界条件

         int m = g.length, n = g[0].length;

         if(r<0||r>=m||c<0||c>=n||!g[r][c])//g[r][c]表示 如果是海洋的话就停止了

         {

             return;

         }else

         {

          g[r][c] = false//将当前格子标记为已访问 该句是关键句

         }

         for(int i=0;i<4;i++)

         {

             dfsSurroundIsland(g,r+DR[i],c+DC[i]);//分别代表上下左右  dr 表示行的变化量 即进行上下偏移 dc表示列的变化量 即进行左右偏移

         }

     

    }

}

http://www.dtcms.com/a/321330.html

相关文章:

  • 【同余最短路】P2371 [国家集训队] 墨墨的等式|省选-
  • C5.2:如何利用BJT的区域进行稳定工作
  • 冠雅新品 | 以“无形之光”守护双眸,以“无声之智”浸润生活
  • 冷冻食材,鲜美生活的新选择
  • 深入理解OpenGL Shader与GLSL:基础知识与优势分析
  • 深度学习·Cascade-CLIP
  • Linux中的内核同步源码相关总结
  • 安科瑞EMS3.0:打造“零碳工厂”的智能能源神经中枢
  • 在 Mac 上安装 IntelliJ IDEA
  • 艾体宝产品 | 从“被看见”到“被信任”:GWI 协助洞察消费者,重构品牌认知
  • day21|学习前端vue3框架和ts语言
  • 二十八天(数据结构:图的补充)
  • 璞致电子 PZ-FH8052 高性能 FMC 子卡:超高速信号链的理想解决方案
  • Agent 开发进阶路线:从基础功能到自主决策
  • C++基础学习笔记
  • 如何在simulink中双击一个模块弹出一个exe?
  • SCI论文润色一站式服务
  • 机器学习模型在订单簿大单预测与应对
  • 线程池分析与设计
  • 【设计模式】访问者模式模式
  • Claude Code 实战场景解析:从代码生成到系统重构的典型应用案例
  • 修复C++14兼容性问题 逻辑检查
  • 控制建模matlab练习11:伯德图
  • 数据大集网:重构企业贷获客生态的线上获客新范式​
  • C++信息学奥赛一本通-第一部分-基础一-第2章-第5节
  • 亚马逊 Alexa + 广告整合:智能语音交互重构电商营销范式
  • AI日报 - 2025年08月08日
  • [科普] AI加速器架构全景图:从GPU到光计算的算力革命
  • vue3 map和filter功能 用法
  • 仅需8W,无人机巡检系统落地 AI 低空智慧城市!可源码交付