代码随想录|图论|05岛屿数量(深搜DFS)

leetcode:99. 岛屿数量

题目

题目描述:

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

输入描述:

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

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

输出描述:

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

思路

遇到一个没有遍历过的节点陆地,计数器就加一,然后把该节点陆地所能遍历到的陆地都标记上(这一步就是为了防止重复计算!)。

在遇到标记过的陆地节点和海洋节点的时候直接跳过.

计数器就是最终岛屿的数量。

下面代码详细注释:

#include <bits/stdc++.h>
using namespace std;// 定义4个方向
int dir[4][2] = {1, 0, 0, -1, -1, 0, 0, 1};void dfs(vector<vector<int>> &grid, vector<vector<bool>> &visited, int x, int y)
{// 终止条件:如果遇到海水或者已经遍历过的岛屿就停下来if (grid[x][y] == 0 || visited[x][y]){return;}// 处理当前节点:当前到了(x,y)这个点,首先就把它标记上visited[x][y] = true;// 当前节点往下延伸,看它四周的点for (int i = 0; i < 4; i++){int nextx = x + dir[i][0];int nexty = y + dir[i][1];// 基本限制条件:下一个点肯定不能跑到整个大矩阵的外面去if (nextx < 0 || nextx >= grid.size() || nexty < 0 || nexty >= grid[0].size())continue;// 递归:这里递归不需要任何条件,因为一进入dfs就会有终止条件来判断dfs(grid, visited, nextx, nexty);}
}int main()
{int n, m;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));vector<vector<bool>> visited(n, vector<bool>(m, false));for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){cin >> grid[i][j];}}// count最终岛屿计数int count = 0;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){// 一个一个陆地开始找,不要觉得麻烦,因为有的陆地已经被标记了,就会直接跳过if (grid[i][j] == 1 && !visited[i][j]){count++;dfs(grid, visited, i, j);}}}cout << count << endl;return 0;
}

一定要清楚dfs在这里的作用:

对(x,y)周围的岛屿进行标记! 

总结

我这里写的是dfs的第二个模板,第一个模版因为没有终止条件,所以写起来感觉很奇怪,我就没有放,感兴趣去看随想录。

参考资料

代码随想录 

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

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

相关文章

数据结构-第二节-堆栈与队列

一、概念&#xff1a; 堆栈与队列也是线性表&#xff0c;但是&#xff1a; 堆栈&#xff1a;只能在一个端进行插入删除&#xff0c;此端称为栈顶。&#xff08;特点&#xff1a;后来居上&#xff09; 队列&#xff1a;在一端进行插入&#xff08;队尾&#xff09;&#xff0…

HarmonyNext动画大全02-显式动画

HarmonyOS NEXT显式动画详解 1. 核心接口 显式动画通过animateTo接口实现&#xff0c;主要特点包括&#xff1a; 触发方式&#xff1a;需主动调用接口触发动画 参数配置 &#xff1a; animateTo({duration: 1000, // 动画时长(ms)curve: Curve.Ease, // 动画曲线delay: 200…

芯谷科技--高压降压型 DC-DC 转换器D7005

在当今电子设备日益复杂且对电源性能要求极高的背景下&#xff0c;一款高效、稳定的电源管理芯片至关重要。 D7005凭借其卓越的性能和广泛的应用适配性&#xff0c;成为众多工程师在设计电源方案时的优选。 产品简介 D7005 是一款高效、高压降压型 DC-DC 转换器&#xff0c;具…

MySQL的GTID详解

GTID&#xff08;Global Transaction Identifier&#xff0c;全局事务标识符&#xff09;是MySQL 5.6及以上版本引入的重要特性&#xff0c;用于在主从复制环境中唯一标识每个事务&#xff0c;简化复制管理、故障转移和数据一致性维护。以下从多维度详细介绍GTID&#xff1a; …

专题:2025中国游戏科技发展研究报告|附130+份报告PDF、原数据表汇总下载

原文链接&#xff1a;https://tecdat.cn/?p42756 本报告汇总解读基于艾瑞咨询《2025中国游戏科技发展白皮书》、伽马数据《2025年1-3月中国游戏产业季度报告》、嘉世咨询《2025中国单机游戏市场现状报告》等多份行业研报数据。当《黑神话&#xff1a;悟空》以虚幻引擎5复刻东…

【数据挖掘】数据挖掘综合案例—银行精准营销

要求&#xff1a; 1、根据相关的信息预测通过电话推销&#xff0c;用户是否会在银行进行存款 2、数据bank.csv&#xff0c;约4520条数据&#xff0c;17个属性值 提示&#xff1a; 17个属性&#xff0c;分别是年龄&#xff0c;工作类型&#xff0c;婚姻状况&#xff0c;受教育…

postgresql查看锁的sql语句

发现一个查看postgresql锁比较好的sql语句&#xff0c;参考链接地址如下 链接地址 查看锁等待sql witht_wait as(select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.trans…

JSON 格式详解

JSON 格式详解 随着互联网的发展和各种 Web 应用程序的普及&#xff0c;数据交换已经成为了我们日常开发中的重要环节。而在各种数据交换格式中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&#xff0c;以其简洁、易于阅…

原型设计Axure RP网盘资源下载与安装教程共享

对于初学者来说&#xff0c;我们熟悉一下其定义&#xff1a;‌Axure RP是一款常用的快速原型设计工具‌&#xff0c;主要用于创建应用软件或Web网站的线框图、流程图、原型和规格说明文档&#xff0c;广泛应用于产品经理、UI/UX设计师等专业领域。‌‌ 主要用户群体&#xff1…

iframe嵌套 redirect中转页面 route跳转

需求是项目A要使用iframe内嵌项目B的页面&#xff0c; 由于需要嵌套的页面很多&#xff0c;每个页面路径和参数又各不相同&#xff0c; 所以我们在项目B里做了一个中转页面&#xff0c;这样就能自己掌控项目A传递过来的东西了&#xff1b; routes.js 增加一个菜单&#xff1a;…

IP数据报 封装成 MAC帧 ( 目的MAC地址6B 源MAC地址6B 类型2B 数据部分 FCS校验和4B )

将 IP 数据报&#xff08;Internet Protocol Datagram&#xff09;封装成 MAC 帧 需要在数据链路层添加适当的头部信息&#xff0c;以便在局域网内进行传输。这个过程涉及将网络层&#xff08;IP 层&#xff09;的数据通过数据链路层&#xff08;MAC 层&#xff09;封装成适合物…

Note2.4 机器学习:Batch Normalization Introduction

Batch Normalization&#xff08;批标准化&#xff0c;BN&#xff09;通过标准化数据的操作&#xff0c;使得损失函数的优化地形&#xff08;optimization landscape&#xff09;更加平滑&#xff0c;从而达到更好地训练效果。BN常用于卷积神经网络&#xff08;CNN&#xff09;…

IDEA在AI时代的智能编程实践:从工蜂到通义灵码的效能跃迁‌‌

引言‌ 在腾讯云工作期间&#xff0c;我曾使用‌工蜂的AI代码补全功能&#xff0c;结合IntelliJ IDEA&#xff08;以下简称IDEA&#xff09;极大提升了开发效率。如今离开腾讯云&#xff0c;面对外部开发环境&#xff0c;如何继续利用AI提升编码效率&#xff1f;本文将系统梳理…

MySQL 慢查询日志详解

慢查询日志&#xff08;Slow Query Log&#xff09;是 MySQL 提供的一种核心性能优化工具&#xff0c;用于记录执行时间超过指定阈值的 SQL 语句。通过分析这些日志&#xff0c;可以定位数据库性能瓶颈&#xff0c;优化低效查询&#xff0c;提升系统整体效率。 一、慢查询日志的…

UV安装Python指南总结

UV安装Python指南总结 UV是一个Python包管理工具,它可以帮助我们安装和管理Python版本。以下是关于UV安装Python的主要功能和用法总结。 基本使用 安装最新版Python uv python install注意&#xff1a;UV使用Astral的python-build-standalone项目提供的Python发行版,而不是…

运维基础-MYSQL数据库-笔记

序 欠10年前自己的一份笔记&#xff0c;献给今后的自己。 数据库介绍 数据的时代 涉及的数据量大数据不随程序的结束而消失数据被多个应用程序共享大数据 数据库的发展史 萌芽阶段&#xff1a;文件系统 使用磁盘文件来存储数据初级阶段&#xff1a;第一代数据库 出现了网状…

从GPTs到Real智能体:目前常见的几种创建智能体方式

文章目录 智能体的三个发展阶段低阶智能体(面向过程) VS 高阶智能体(面向目标)主流智能体创建平台实践基础型平台cherry-studio豆包讯飞星火腾讯元器 高阶智能体开发体系cline开发套件Coze平台Dify开源框架Manus突破性方案 技术演进趋势总结 智能体的三个发展阶段 当前智能体技…

WPF 实现自定义数字输入弹窗

1.前端代码实现 <Grid><Grid.RowDefinitions><RowDefinition Height"100" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0…

基于yolo海洋垃圾物品识别系统flask

查看完整项目包点击文末名片 项目简介 本项目 基于YOLO的海洋垃圾物品识别系统 旨在利用深度学习中的YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;实现对海洋垃圾的自动识别与分类。通过构建一个基于Flask的Web应用&#xff0c;用户可以方便地上传图片&…

从数据到决策:UI前端如何利用数字孪生技术提升管理效率?

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型的深水区&#xff0c;企业管理者正面临数据过载与决策滞后的双重挑战 ——IDC 研…