岛屿数量介绍

news2024/9/21 2:48:46

在Java编程语言中,岛屿数量通常指的是在一个二维字符数组(grid)中,相邻的、值为'1'的格子数量。这个二维字符数组可能代表一个地图或一个二维平面,每个'1'代表一个岛屿或地形凸起,每个'0'代表一个海洋或平坦地区。

计算岛屿数量的常用方法是深度优先搜索(DFS)。首先,从地图的任意一个'1'开始,递归地搜索相邻的'1'。每当找到一个'1'时,计数器加一。搜索完成后,计数器的值就是岛屿数量。

下面是一个Java程序示例,它使用DFS算法来计算二维字符数组中的岛屿数量:

  1. public class NumberIslands {
  2.     public static int[] DX = new int[]{1, 0, -1, 0}; // 定义上、右、下、左四个方向的移动步数
  3.     public static int[] DY = new int[]{0, 1, 0, -1}; // 对应上、右、下、左四个方向的移动方向
  4.     
  5.     public static int numIslands(char[][] grid) {
  6.         int count = 0; // 岛屿数量初始化为0
  7.         if (grid == null || grid.length == 0) {
  8.             return count; // 如果输入的二维字符数组为空,直接返回0
  9.         }
  10.         int m = grid.length; // 地图的行数
  11.         int n = grid[0].length; // 地图的列数
  12.         for (int i = 0; i < m; i++) {
  13.             for (int j = 0; j < n; j++) {
  14.                 if (grid[i][j] == '1') { // 如果当前位置是岛屿(值为'1')
  15.                     dfs(grid, i, j, m, n, count); // 调用深度优先搜索函数
  16.                     count++; // 岛屿数量加一
  17.                 }
  18.             }
  19.         }
  20.         return count; // 返回岛屿数量
  21.     }
  22.     
  23.     private static void dfs(char[][] grid, int i, int j, int m, int n, int count) {
  24.         if (i < 0 || j < 0 || i >= m || j >= n || grid[i][j] != '1') {
  25.             return; // 如果当前位置不在地图范围内或者是海洋(值为'0'),或者是已经访问过的岛屿,直接返回
  26.         }
  27.         grid[i][j] = '0'; // 将当前位置标记为已访问(值改为'0')
  28.         dfs(grid, i - 1, j, m, n, count); // 上方搜索
  29.         dfs(grid, i + 1, j, m, n, count); // 下方搜索
  30.         dfs(grid, i, j - 1, m, n, count); // 左方搜索
  31.         dfs(grid, i, j + 1, m, n, count); // 右方搜索
  32.     }
  33. }

在这个程序中,numIslands方法接收一个二维字符数组grid作为输入,返回一个整数,表示该地图中的岛屿数量。dfs方法是实现深度优先搜索的辅助函数。

好的,继续上面的内容。

在上述程序中,numIslands方法是主要的方法,用于计算岛屿的数量。它首先检查输入的二维字符数组是否为空,如果是,则直接返回0。然后,它遍历整个地图,对于每个值为'1'的位置,都调用dfs方法进行深度优先搜索,并将岛屿数量加一。

dfs方法是实现深度优先搜索的辅助函数。它首先检查当前位置是否在地图范围内,以及当前位置的值是否为'1'。如果不是,则直接返回。如果是,则将当前位置标记为已访问(值改为'0'),然后对上、下、左、右四个方向进行递归搜索。

在搜索过程中,如果遇到值为'1'的位置,就继续对该位置进行深度优先搜索。这样,通过递归的方式,可以遍历整个地图,并将所有相邻的岛屿都计数在内。

最后,numIslands方法返回岛屿数量,即所有找到的岛屿的个数。这个值可以用来表示地图中的岛屿分布情况,或者用于其他相关的计算和分析。

需要注意的是,上述程序中使用了DFS算法来遍历地图。这种算法可以有效地解决与图形遍历相关的问题,包括计算岛屿数量、寻找路径等。通过深度优先搜索的方式,可以避免遗漏任何可能的情况,从而得到正确的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1312141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HI3559AV100和FPGA 7K690T的PCIE接口调试记录-续

上文https://blog.csdn.net/fzktongyong/article/details/134963814?spm1001.2014.3001.5501 上一篇文中PCIE实测速度和理论计算有较大偏差&#xff0c;经过尝试后有所提升。 1、提升效果 1&#xff09;、RC写操作&#xff0c;实测速度817MB/s&#xff08;410407&…

JupyterNotebook VS JupyterLab 如果jupyter安装成功,点击jupyterlab即可进入lab环境

简介 JupyterNotebook 是一个款以网页为基础的交互计算环境&#xff0c;可以创建Jupyter的文档&#xff0c;支持多种语言&#xff0c;包括Python, Julia, R等等。一般来说&#xff0c;如果是使用R语言的话&#xff0c;使用Rstudio居多&#xff0c;使用Python的话&#xff0c;使…

第78讲:截取MySQL Binlog二进制日志中特定部分内容的技巧

文章目录 1.为什么要截取Binlog日志中的部分内容2.针对标识位截取Binlog日志中的部分数据2.1.以标识位号截取Binlog日志的方法2.2.截取Binlog日志中的部分数据2.3.模拟简单基于标识位的Binlog数据恢复 3.针对事件范围截取Binlog日志中的部分数据 1.为什么要截取Binlog日志中的部…

虚幻学习笔记15—C++和UI(一)

一、前言 在C可以直接创建按钮、滚轮等UI&#xff0c;并且可以直接绑定并处理响应事件。在创建C代码后还是需要通过蓝图来显示到应用中&#xff0c;总体来说还是不如直接用蓝图来的方便。 本文使用的虚幻引擎为5.2.1。 二、实现 2.1、创建UUserWidgetl类型的C类 声明两个按钮…

老杨说运维 | 年末大盘点!擎创CEO实时盘点运维大干货,不容错过

2023年即将走到尾声&#xff0c;对于擎创而言&#xff0c;这一年是颇具成长和成就的一年。我们庆幸获得了更多客户的信任&#xff0c;也为他们达到下一个运维阶段提供了充足的助力。 越多的实践就会带来越多新的理解和可优化的经验。这一年来&#xff0c;擎创在运维数据治理、智…

【PID学习笔记10】PID公式分析

写在前面 前面已经将控制系统的基础知识点过了一遍&#xff0c;从本节开始&#xff0c;将正式学习PID控制的相关知识&#xff0c;将会从基本的PID公式概念解释&#xff0c;再基于matlab仿真介绍十几种数字式PID的基本概念。本文重点讲解PID的经典公式。 一、连续与离散的概念…

Tableau进阶--Tableau数据故事慧(20)解构Tableau的绘图逻辑

官网介绍 官网连接如下&#xff1a; https://www.tableau.com/zh-cn tableau的产品包括如下&#xff1a; 参考:https://zhuanlan.zhihu.com/p/341882097 Tableau是功能强大、灵活且安全些很高的端到端的数据分析平台&#xff0c;它提供了从数据准备、连接、分析、协作到查阅…

【MATLAB】数据拟合第10期-二阶多项式的局部加权回归拟合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 二阶多项式局部加权回归拟合算法是一种用于回归分析的方法&#xff0c;主要通过局部加权线性回归模型来实现。以下是对二阶多项式局部加权回归拟合算法的介绍&#xff1a; 局部加权线性回…

C# OpenCvSharp DNN 部署YOLOV6目标检测

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN 部署YOLOV6目标检测 效果 模型信息 Inputs ------------------------- name&#xff1a;image_arrays tensor&#xff1a;Float[1, 3, 640, 640] -------------------------------------------------------------…

搭建个人智能家居 开篇(搭建Home Assistant)

搭建个人智能家居 开篇&#xff08;搭建Home Assistant&#xff09; 前言Home Assistant搭建Home AssistantUbuntu系统搭建Windows系统搭建VM安装方法VirtualBox安装方法&#xff1a; 配置Home Assistant控制页面 前言 随着科技的进步、发展&#xff0c;物联网给我们的生活带来…

Axure的安装及界面基本功能介绍

目录 一. Axure概述 二. Axure安装 2.1 安装包下载 2.2 安装步骤 三. Axure功能介绍​ 3.1 工具栏介绍 3.1.1 复制&#xff0c;剪切及粘贴 3.1.2 选择模式和连接 3.1.3 插入形状 3.1.4 点&#xff08;编辑控点&#xff09; 3.1.5 置顶和置底 3.1.6 组合和取消组合 …

双向无线功率传输系统MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介&#xff1a; 初级侧转换器通过双向 AC/DC 转换器从电网获取电力&#xff0c;并由直流线电压 Vin 供电&#xff0c;而拾波侧被视为连接到 EV&#xff0c;并由连接到任一存储的单独直流源 Vout 表示或…

express 下搞一个 websocket 长连接

安装模块 npm i express npm i express-ws 新建文件app.js 先安排源码 监听端口 7777 var express require(express) var app express() require(express-ws)(app)var port 7777 var clientObject {} app.ws(/, (client, req) > {// 连接var key req.socket.re…

TypeScript【枚举、联合类型函数_基础、函数_参数说明 、类的概念、类的创建】(二)-全面详解(学习总结---从入门到深化)

文章目录 枚举 联合类型 函数_基础 函数_参数说明 类的概念 类的创建 枚举 枚举&#xff08;Enum&#xff09;类型用于取值被限定在一定范围内的场景&#xff0c;比如一周只能有七天&#xff0c;颜色限定为红绿蓝等 枚举例子 枚举使用 enum 关键字来定义 enum Days {…

locust 压测 websocket

* 安装 python 3.8 https://www.python.org/ py --version * 安装 locust pip install locust2.5.1 -i http://pypi.douban.com/simple/ pip install locust2.5.1 -i https://pypi.mirrors.ustc.edu.cn/simple/ locust -V 备注&#xff1a;-i 是切换下载源 * 安装依赖 pip ins…

一篇文章讲透TCP/IP协议

1 OSI 7层参考模型 2 实操连接百度 nc连接百度2次&#xff0c;使用命令netstat -natp查看就会重新连接一次百度 请求百度 3 三次握手、socket 应用层协议控制长连接和短连接 应用层协议->传输控制层&#xff08;TCP UDP&#xff09;->TCP&#xff08; 面向连接&am…

超声波清洗机应该怎样使用?清洁能力强超声波清洗机推荐

其实超声波清洗机使用方法非常简单&#xff0c;只需要将清洁物品放进超声波清洗机内&#xff0c;加入水打开开关即可开始使用&#xff0c;不需要太复杂操作就可以开启清洗&#xff0c;等待个数分钟就可以得到一个干干净净的物品被清洗完毕&#xff01;可见现在科技进步&#xf…

在Node.js中MongoDB更新数据的方法

本文主要介绍在Node.js中MongoDB更新数据的方法。 目录 Node.js中MongoDB更新数据使用原生 MongoDB 驱动程序更新数据使用 Mongoose 更新数据 Node.js中MongoDB更新数据 在Node.js中&#xff0c;可以使用原生的 MongoDB 驱动程序或者使用 Mongoose 来更新 MongoDB 数据。 下面…

Redis设计与实现之字典

目录 一、字典 1、 字典的应用 实现数据库键空间 用作Hash类型键的其中一种底层实现 2、字典的实现 哈希表实现 哈希算法 3、创建新字典 4、添加键值对到字典 5、添加新元素到空白字典 6、添加新键值对时发生碰撞处理 7、添加新键值对时触发了 rehash操作 Note:什么…

SpringIOC之FilterType

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…