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

岛屿数量 广搜版BFS C#

和之前的卡码网深搜版是一道题  力扣第200题 

99. 岛屿数量

题目描述

给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。

输入描述

第一行包含两个整数 N, M,表示矩阵的行数和列数。

后续 N 行,每行包含 M 个数字,数字为 1 或者 0。

输出描述

输出一个整数,表示岛屿的数量。如果不存在岛屿,则输出 0。

输入示例
4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1
输出示例
3
提示信息

根据测试案例中所展示,岛屿数量共有 3 个,所以输出 3。

数据范围:

1 <= N, M <= 50

 思路:广度优先搜索:如果一个位置为 1,则将其加入队列,开始进行广度优先搜索。在广度优先搜索的过程中,每个搜索到的 1 都会被重新标记为 0。直到队列为空,搜索结束。最终岛屿的数量就是我们进行广度优先搜索的次数

BFs比Dfs简单点的就是不需要Dfs深搜函数 直接在一个大循环中新建队列就可以利用队列进行搜索值为1的位置并且更改其值为0 

注意:1.Queue<int[]> 存储的是 一维数组int[]),每个 int[] 存储的是一个位置的坐标(例如,二维数组中的行和列)

假设二维数组 grid 长这样:

grid = { {'1', '0', '1'}, {'0', '1', '0'}, {'1', '0', '1'} }

遍历数组后,存储到队列中的内容会是:

queue = { {0, 1}, {1, 0}, {1, 2}, {2, 1} }

每个队列元素是一个 int[] 数组,例如 {0, 1},表示二维数组 grid 中的位置 (0, 1),即 grid[0][1] 的值是 '0'

Queue也可以在外边声明也可以在if语句中声明  

2.将 Queue 的声明移到 if 语句内部的好处是: 

  1. 每次发现新的岛屿时,您都会创建一个新的队列,这样就不会重用先前岛屿的队列。
  2. 这样也可以让 queue 仅在岛屿查找过程中存在,避免了不必要的内存占用。

代码实现:

using System;
System.Collections.Generic
class Program
{
    static void Main()
    {
        //读取输入
        string[] firstLine=Console.ReadLine().Split();//读取一行输入并将其分割成一个字符串数组
        int n=int.Parse(firstLine[0]);
        int m=int.Parse(firstLine[1]);
        
        //填充岛屿
        int[,] grid=new int[n,m];
        
        for(int i=0;i<n;i++)
        {
            firstLine=Console.ReadLine().Split();
            for(int j=0;j<m;j++)     //填充每一行
            {
                grid[i,j]=int.Parse(firstLine[j]);
            }
        }
        
        //计算岛屿数量
        int Count=CountIsland(grid,n,m);
        Console.WriteLine(Count);
    }
    
    public int CountIsland(int[,]grid ,int n,int m)
    {
        int count=0;
         
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(grid[i,j]==1)
                {
                    count++;
                   grid[i,j]=0;
                   Queue<int[]> queue=new Queue<int[]>();
                  queue.Enqueue(new int[]{i,j});//将坐标入队 
                  while(queue.Count>0)
                  {
                      int[] tmp=queue.Dequeue();
                      int r=tmp[0];
                      int c=tmp[1];
                    //判断该坐标四周
                        if(r-1>=0 && grid[r-1,c]==1)
                        {
                            queue.Enqueue(new int[]{r-1,c});
                            grid[r-1,c]=0;
                        }
                        if(r+1<n && grid[r+1,c]==1)
                        {
                            queue.Enqueue(new int[]{r+1,c});
                            grid[r+1,c]=0;
                        }
                         if(c-1>=0 && grid[r,c-1]==1)
                        {
                            queue.Enqueue(new int[]{r,c-1});
                            grid[r,c-1]=0;
                        }
                         if(c+1<m && grid[r,c+1]==1)
                        {
                            queue.Enqueue(new int[]{r,c+1});
                            grid[r,c+1]=0;
                        }                 
                  }
                }
            }
        }
        return count; //返回岛屿数量
    }
    
}

相关文章:

岛屿数量 广搜版BFS C#

和之前的卡码网深搜版是一道题 力扣第200题 99. 岛屿数量 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。…...

hive切换表底层文件类型以及分隔符

1、改底层文件存储类型&#xff0c;但是一般只会在数据文件与期望类型一致的时候使用&#xff0c;比如load等方式时发现建表时没指定对这样的&#xff0c;因为这个语句不会更改具体的底层文件内容&#xff0c;只改元数据 ALTER TABLE 表名 SET FILEFORMAT 希望类型;2、更改数据…...

ChatGPT o1与GPT-4o、Claude 3.5 Sonnet和Gemini 1.5 Pro的比较

全新的ChatGPT o1模型&#xff08;代号“Strawberry”&#xff09;是OpenAI的最新进展&#xff0c;专注于以前的AI模型难以应对的领域&#xff1a;高层次推理、数学和复杂编程。OpenAI设计o1模型以花费更多时间思考问题&#xff0c;使其在需要逐层推理的任务中提高准确性。本文…...

asp.net文件防盗链

URLRewriter实现 可以参考下面的文章 代码 .net framework 新建asp.net framework的web项目&#xff0c;新建AntiTheftChainHandler using System.Web;namespace AntiTheftChainStu01.Handler {public class AntiTheftChainHandler : IHttpHandler{public bool IsReusable…...

【日志】力扣58.最后一个单词的长度//14.最长公共前缀//28. 找出字符串中第一个匹配项的下标

2024.11.6 【力扣刷题】 58. 最后一个单词的长度 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/length-of-last-word/?envTypestudy-plan-v2&envIdtop-interview-150 int lengthOfLastWord(char* s) {int count 0;for (int i strlen(s) - 1; i…...

华为杯”第十五届中国研究生数学建模竞赛-B题:光传送网建模与价值评估(续)

目录 4. 问题二 光传送网规划 4.1 基本假设 4.2 模型建立 4.3 子问题一 4.2 子问题二 4.5 子问题三 5. 问题三 改善星座图 5.1 问题简述 5.2 问题分析 5.3 建模与问题求解 5.3.1 方案一 5.3.2 方案二 6. 模型评价 6.1 模型的优点 6.2 模型的缺点 参考文献 本文篇幅较长,分为上…...

android 使用xml设置背景图片和圆角

使用xml设置背景图片和圆角 <?xml version"1.0" encoding"utf-8"?> <layer-list xmlns:android"http://schemas.android.com/apk/res/android"><item><shape><solid android:color"android:color/transparen…...

数据结构,问题 E: 表达式括号匹配

题目描述 假设一个表达式有英文字母&#xff08;小写&#xff09;和数字、运算符&#xff08;&#xff0c;—&#xff0c;*&#xff0c;/&#xff09;和左右小&#xff08;圆&#xff09;括号构成&#xff0c;以“”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号…...

国家宠物美容师职业技能等级评价(高级)理论考试题

国家宠物美容师职业技能等级评价 理论考试复习参考范围 高级/三级 宠物美容师&#xff08;高级&#xff09;理论考试题 一 判断题 犬只的世界只有黑白灰三种&#xff0c;通过颜色呈现的深浅度进行辨识&#xff08;A &#xff09; A 对 B 错 美国养犬俱乐部简称AKC&#xf…...

Spring挖掘:(AOP篇)

学习AOP时,我们首先来了解一下何为AOP 一. 概念 AOP&#xff08;面向切面编程&#xff0c;Aspect Oriented Programming&#xff09;是一种编程技术&#xff0c;旨在通过预编译方式或运行期动态代理实现程序功能的统一管理和增强。AOP的主要目标是在不改变原有业务逻辑代码的…...

十四届蓝桥杯STEMA考试Python真题试卷第二套第四题

来源:十四届蓝桥杯STEMA考试Python真题试卷第二套编程第四题:糖果罐调整 该题解通过贪心策略在每一步都选择对当前状态最有利的操作,从而达到最少调整次数的目标。 题目描述 现有 N 罐糖果,且已知每罐糖果的初始数量。现给出两个数值 L 和 R(L≤R),需要把每罐糖果的数…...

单元测试怎么做

单元测试是软件开发中非常重要的一部分&#xff0c;能够确保代码的正确性、可靠性和可维护性。对于 Vue 项目来说&#xff0c;单元测试主要关注的是测试组件及其相关功能是否正常。下面是如何在 Vue 项目中进行单元测试的详细步骤&#xff0c;包括测试框架的选择、测试工具的配…...

移动应用开发 实验二:标准身高计算器

文章目录 准备工作一&#xff0c;创建Android Studio项目二&#xff0c;创建活动模块三&#xff0c;设计用户界面&#xff08;一&#xff09;设置页面布局&#xff08;二&#xff09;添加标题文本控件&#xff08;三&#xff09;设计体重输入框&#xff08;四&#xff09;设计性…...

金华迪加现场大屏互动系统 mobile.do.php 任意文件上传漏洞复现

0x01 产品描述&#xff1a; ‌ 金华迪加现场大屏互动系统‌是由金华迪加网络科技有限公司开发的一款专注于增强活动现场互动性的系统。该系统设计用于提供高质量的现场互动体验&#xff0c;支持各种大型活动&#xff0c;如企业年会、产品发布会、展览展示等。其主要功能包…...

使用 pd.ExcelWriter 创建多工作表 Excel 文件的详细教程

with pd.ExcelWriter(...) as writer 可以将多个内容写入一个 Excel 文件中。具体地说&#xff0c;它创建了一个Excel 文件写入器&#xff0c;使得我们可以在一个文件中创建多个工作表&#xff08;Sheet&#xff09;。 with pd.ExcelWriter("模型指标和损失值.xlsx")…...

驱动-----dht11温湿度传感器

单总线&#xff1a;只用一根线。 复位信号&#xff1a;设置为输出模式&#xff0c;低电平20ms&#xff0c;然后再拉高30us。然后设置为输入模式&#xff0c;dht11会先拉低80us&#xff0c;然后拉高80us表示对接成功 数据0&#xff1a;开始先拉低50us&#xff0c;然后拉高26~28u…...

Docker 基础命令简介

目录 Docker 基础命令 1. Docker 版本信息 2. 获取 Docker 帮助 3. 列出所有运行中的容器 4. 运行一个新的容器 5. 查看容器日志 6. 停止容器 7. 启动已停止的容器 8. 删除容器 9. 列出所有镜像 10. 拉取镜像 11. 构建镜像 12. 删除镜像 13. 执行命令 14. 查看容…...

嵌入式开发之静态库和共享库

静态库 静态库的特点: 默认执行库链接的时候,检索的是Linux的/lib、/usr/lib目录下,如果指定gcc -c .... -L 指定路径 -l指定库文件;c语言分为预编译、编译、汇编、链接四个步骤。链接的时候是把依赖库文件函数的代码拷贝到程序里面,即便是删除库文件。拷贝后的程序依旧…...

关于npm源的切换及相关操作

要查看当前配置的 npm 源&#xff08;registry&#xff09;&#xff0c;可以使用以下命令&#xff1a; 查看 npm 源 npm config get registry这个命令会返回目前被设置的 npm registry URL&#xff0c;通常情况下是 https://registry.npmjs.org/。 列出所有 npm 配置项 如果…...

vue前端sku实现

this.value.skuStockList [];let skuList this.value.skuStockList;//只有一个属性时if (this.selectProductAttr.length 1) {let attr this.selectProductAttr[0];for (let i 0; i < attr.values.length; i) {skuList.push({spData: JSON.stringify([{key:attr.name,v…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...