孤岛的总面积(Dfs C#

卡码网  101题 

 力扣第

1254. 统计封闭岛屿的数目 也是一样的 差不多是一道题  

101. 孤岛的总面积

题目描述

给定一个由 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
输出示例
1
提示信息

在矩阵中心部分的岛屿,因为没有任何一个单元格接触到矩阵边缘,所以该岛屿属于孤岛,总面积为 1。

数据范围:

1 <= M, N <= 50。

看力扣题解是有很多种方法 深搜中有 用bool DFs的 也有用边长的 但是我没太看懂边长的版本 

代随的方法是 先清理完四边的陆地再普通深搜搜一遍岛屿数量 然后将每个岛屿的面积相加 感觉比较清晰简单故采用这个方法

思路:先清理完四边的陆地再普通深搜搜一遍岛屿数量 然后将每个岛屿的面积相加 

using System;

class Program
{
    static void Main()
    {
        //读取输入
        string[] firstLine=Console.ReadLine().Split();//读取一行输入并将其分割成一个字符串数组
        int n=int.Parse(firstLine[0]);
        int m=int.Parse(firstLine[1]);
        //总面积
        int result=0;
        //填充岛屿
        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 SumLand =AreaIsland(grid,n,m);
        Console.WriteLine(SumLand);
    }
    //遍历整个数组并且将每一个岛屿的面积相加
    public static int AreaIsland(int[,]grid ,int n,int m)
    {
         //清理上下左右边界的陆地
         for(int i=0;i<m;i++)
        {
            if(grid[0,i]==0)//如果第一行找到土地 直接DFS全变为水
            {
                Dfs(grid,0,i,n,m);
            }
            if(grid[n-1,i]==0)
            {
                Dfs(grid,n-1,i,n,m);
            }
        }
        //左右列
        for(int j=0;j<n;j++)
        {
            if(grid[j,0]==0)//如果第一列找到土地 直接DFS全变为水
            {
                Dfs(grid,j,0,n,m);
            }
            if(grid[j,m-1]==0)
            {
                Dfs(grid,j,m-1,n,m);
            }
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(grid[i,j]==1)
                {
                    
                   int s= Dfs(grid,i,j,n,m);
                   result+=s; //每次循环都累加面积
                }
            }
        }
        return result; //返回岛屿总面积
    }
    
    public static int Dfs(int[,] grid ,int r,int c,int n,int m)
    {
        //如果下标不在范围内 直接返回
        if(r<0 || r>=n ||c<0 ||c>=m)
        {
            return 0;
        }
        if(grid[r,c]!=1)
        {
            return 0;
        }
        //如果在范围内 
        //将当前陆地标记为水 避免重复基数
        grid[r,c]=0; //递归访问四个方向
        return 1+Dfs(grid,r+1,c,n,m)
                +Dfs(grid,r-1,c,n,m)
                +Dfs(grid,r,c+1,n,m)
                +Dfs(grid,r,c-1,n,m);
    }
    
}

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

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

相关文章

论文解读 P2《Knowledge Graphs Meet Multi-Modal Learning: A Comprehensive Survey》

论文解读系列文章目录 文章目录 论文解读系列文章目录一、图中公式什么意思&#xff1f;二、“早期的基于匹配和密集嵌入相似性的方法&#xff0c;逐步发展到可学习的检索技术和预训练语言模型&#xff08;PLM&#xff09;生成技术”什么意思&#xff1f;三、在从问题&#xff…

http请求响应详解

http介绍 http协议&#xff1a; Http”协议称为是“超文本传输协议”&#xff08;HTTP-Hypertext transfer protocol&#xff09;。它定义了浏览器怎么向万维网服务器请求万维网文档&#xff0c;以及服务器怎么样把文档传送给浏览器。 https协议&#xff1a; 传统的HTTP协议…

mysql5安全审计

安装插件 插件需要严格与数据库版本适配&#xff0c;不然安装过程中会出现问题 解压插件 cd 插件所在路径unzip audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64.zip#查看mysql默认插件目录 mysql> SHOW GLOBAL VARIABLES LIKE plugin_dir;# 将插件移动到mysql默认插件目…

一文解秘Rust如何与Java互操作

本博客所有文章除特别声明外&#xff0c;均采用CC BY-NC-SA 4.0许可协议。转载请注明来自 唯你 使用场景 JAVA 与 Rust 互操作让 Rust 可以背靠 Java 大生态来做更多事情&#xff0c;而 Java 也可以享受 Rust 语言特性的内存安全&#xff0c;所有权机制&#xff0c;无畏并发。…

架构零散知识点

1 数据库 1.1 数据库范式 有一个学生表&#xff0c;主键是学号&#xff0c;含有学生号、学生名、班级、班级名&#xff0c;违反了数据库第几范式&#xff1f; --非主属性不依赖于主键&#xff0c;不满足第二范式 有一个订单表&#xff0c;包含以下字段&#xff1a;订单ID&…

ZISUOJ 2024算法基础公选课练习一(1)

前言、 又是一年算法公选课&#xff0c;与去年不同的是今年学了一些纯C&#xff08;而不是带类的C&#xff09; 一、我的C模板 1.1 模板1 #include <bits/stdc.h> using i64 long long;int main() {std::cin.tie(nullptr)->sync_with_stdio(false);return 0; } 1…

25.停车场管理系统(基于web的Java项目)

目录 1.系统的受众说明 2.相关技术与方法 3.系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 需求分析 3.2.1 系统功能描述 3.2.2 用例图分析 4. 系统设计 4.1 系统类分析 5. 系统详细设计与实现 5.1 用户登录 5.2 系统信…

string模拟实现构造+析构

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 string模拟实现构造 方案1&#xff08;初始化列表的实现&#xff09;&#xff1a; 这…

每日OJ题_牛客_小红的口罩_堆+贪心_C++_Java

目录 牛客_小红的口罩_堆贪心 题目解析 C代码 Java代码 牛客_小红的口罩_堆贪心 小红的口罩 描述&#xff1a; 疫情来了&#xff0c;小红网购了 n个口罩。众所周知&#xff0c;戴口罩是很不舒服的。小红每个口罩戴一天的初始不舒适度为 ai​。 小红有时候…

Bruno解决SSL验证问题

在测试接口的时候&#xff0c;我使用的是Bruno这个软件&#xff0c;开源离线的API测试软件。 主页是这样子的 今天在测试一个HTTPS的接口时候&#xff0c;因为这个HTTPS接口是用的是自签证书&#xff0c;所以就报错误了。 Error invoking remote method send-http-request: …

IBM股票分析:IBM的股价已经涨不动了吗?该买入还是卖出?

猛兽财经核心观点&#xff1a; &#xff08;1&#xff09;由于第三季度业绩疲弱&#xff0c;摩根士丹利已将IBM目标股价下调到了208美元。 &#xff08;2&#xff09;IBM的软件业务虽然增长了9.7%&#xff0c;但咨询和基础设施业务却还在挣扎。 &#xff08;3&#xff09;猛兽财…

【数据结构】线性表——顺序表

文章目录 一、线性表二、顺序表2.1概念及结构2.2、顺序表接口实现2.2.1、顺序表的动态存储2.2.2、顺序表初始化2.2.3、检查空间判断进行增容2.2.4、顺序表尾插、尾删2.2.5、顺序表头插、头删2.2.6、顺序表查找2.2.7、顺序表在pos位置插入x2.2.8、顺序表删除pos位置的值2.2.9、顺…

JAVA基础:分页 (学习笔记)【DVD分页查看】

分页 分页一张表---创建entry类 分页多张表---创建pojo类 1&#xff0c;准备实体类 com.jr.entry.DVD 2&#xff0c;接口问题&#xff1a; &#xff08;1&#xff09;根据条件 --- 获得符合条件的总条数 &#xff08;2&#xff09;根据条件 --- 获得符合条件的集合数据。 …

macOS开发环境配置与应用开发(详细讲解)

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 macOS作为Apple公司推出的桌面操作系统&#xff0c;以其稳定性、优雅的用户界面和强大的开发工具吸引了大量开发者。对于…

Qt桌面应用开发 第二天(信号和槽 Lambda表达式)

目录 1.信号和槽 1.1信号 1.2信号和槽重载问题 1.3 注意事项 1.4信号和槽Lambda表达式 1.信号和槽 信号的发送者——信号——信号的接受者——信号的处理&#xff08;槽函数&#xff09; connect(信号的发送者&#xff0c;发送的信号&#xff0c;信号的接受者&#xff0…

ubuntu 22.04 server 安装 anaconda3

ubuntu 22.04 server 安装 anaconda3 https://www.anaconda.com/download/success Anaconda Installers wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh 其他的是 默认 Executing transaction: done installation finished. Do you wish to…

如何设置VSCODE快捷键光标移到行首和行尾

{ "key": "cmdhome", "command": "cursorTop", },{ "key": "cmdend", "command": "cursorBottom", }

台新金控在台北金融科技展上展示自研GenAI应用与LLM

在今年的台北金融科技展上&#xff0c;多家金融机构展示了他们的生成式人工智能&#xff08;GenAI&#xff09;应用。其中&#xff0c;台新金控也展示了包括升级后的智能客服、面向企业金融客户的拟真客服人员、影片生成服务以及音乐生成服务等应用。 然而&#xff0c;台新的亮…

项目开发流程规范文档

项目开发流程规范文档 目标: 明确项目组中需求管理人员, 交互设计, 美工以及开发之间的工作输入输出产物. 明确各岗位职责. 以免造成开发, 产品经理以及项目经理之间理解不到位, 沟通成本过高,返工造成资源浪费. 所有环节产生的文档都可以作为项目交付的资源. 而不是事后再补文…

Go API 多种响应的规范化处理和简化策略

一个对外提供API接口的服务&#xff0c;在真正动工开发接口前一般需要先确定一下接口响应的通用格式&#xff0c;无论接口响应里返不返回业务数据&#xff0c;返回的数据是字符串、列表、对象还是其他类型都会遵照这个通用的响应格式。 既然一个项目接口的响应格式是确定的&…