深度遍历-求“岛屿数量”

2024-06-13 01:12
文章标签 遍历 数量 深度 岛屿

本文主要是介绍深度遍历-求“岛屿数量”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题描述

二、解题思路

1.设置一个对应的boolean二维数组 isfind[][] ,用来标记已经遍历过的“岛屿”

2.使用双层循环遍历岛屿(grid)二维数组,当遇到 isfind[i][j]=false 时表示遇到一个新岛屿

3.当遇到新岛屿时进行深度递归遍历,向左、向上、向下、向右尝试“走动”,当新的 i,j位置 满足:

        (1) i、j满足二维数组的索引范围

        (2)grid[i][j]==1;//当前是岛屿

        (3)isfind[i][j]==1;//当前岛屿未访问过

上面蓝色和红色就是两个不同的岛屿,同时红色在向右侧走时发现了满足条件的岛屿(红色星星标注),会合并入第二个岛屿。

三、代码实现

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 判断岛屿数量* @param grid char字符型二维数组 * @return int整型*/public int solve (char[][] grid) {int rowsize=grid.length;int colsize=grid[0].length;//设置一个对应的boolean二维数组boolean[][] isfinded=new boolean[rowsize][colsize];int islandNum=0;//双层循环遍历grid二维数组,当遇到isfind[i][j]=false时表示遇到一个新岛屿for(int i=0;i<rowsize;i++){for(int j=0;j<colsize;j++){if(grid[i][j]=='1'&&!isfinded[i][j]){islandNum++;allDirectionFind(grid,i,j,isfinded);}}}return islandNum;}public void allDirectionFind(char[][] grid,int row,int col,boolean[][] isfinded){int rowsize=grid.length;int colsize=grid[0].length;if(!isfinded[row][col]){isfinded[row][col]=true;if(row+1<rowsize){//可向下if(grid[row+1][col]=='1'&&!isfinded[row+1][col]){allDirectionFind(grid,row+1,col,isfinded);}}if(row-1>=0){//可向上if(grid[row-1][col]=='1'&&!isfinded[row-1][col]){allDirectionFind(grid,row-1,col,isfinded);}}if(col+1<colsize){//可向右if(grid[row][col+1]=='1'&&!isfinded[row][col+1]){allDirectionFind(grid,row,col+1,isfinded);}}if(col-1>=0){//可向左if(grid[row][col-1]=='1'&&!isfinded[row][col-1]){allDirectionFind(grid,row,col-1,isfinded);}}}}
}

四、刷题链接

岛屿数量_牛客题霸_牛客网

这篇关于深度遍历-求“岛屿数量”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055871

相关文章

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

韦季李输入法_输入法和鼠标的深度融合

在数字化输入的新纪元,传统键盘输入方式正悄然进化。以往,面对实体键盘,我们常需目光游离于屏幕与键盘之间,以确认指尖下的精准位置。而屏幕键盘虽直观可见,却常因占据屏幕空间,迫使我们在操作与视野间做出妥协,频繁调整布局以兼顾输入与界面浏览。 幸而,韦季李输入法的横空出世,彻底颠覆了这一现状。它不仅对输入界面进行了革命性的重构,更巧妙地将鼠标这一传统外设融入其中,开创了一种前所未有的交互体验。 想象

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

深度优先(DFS)和广度优先(BFS)——算法

深度优先 深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支,当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端