力扣第200题 岛屿数量
前言
记录一下刷题历程 力扣第200题 岛屿数量
岛屿数量
原题目:
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:grid = [
[“1”,“1”,“1”,“1”,“0”],
[“1”,“1”,“0”,“1”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“0”,“0”,“0”]
]
输出:1
示例 2:
输入:grid = [
[“1”,“1”,“0”,“0”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“1”,“0”,“0”],
[“0”,“0”,“0”,“1”,“1”]
]
输出:3
分析
网格由’1’(陆地)和’0’(水域)组成,岛屿被定义为一组相连的陆地。相连的陆地可以是水平或垂直相邻,但不能是对角线相邻。我们使用广度优先搜索(从某个节点出发,始终优先访问距离最近的顶点,并一层层向外扩张)来搜索每一个岛屿,我们可以使用一个队列来辅助BFS搜索
代码如下:
class Solution {
public:// 计算岛屿数量的主函数int numIslands(vector<vector<char>>& grid) {int nums = 0; // 记录岛屿数量int rows = grid.size(); // 获取网格的行数if (!rows) return nums; // 如果行数为0,直接返回0int cols = grid[0].size(); // 获取网格的列数// 创建一个与grid同样大小的访问标记数组vector<vector<bool>> visit(rows, vector<bool>(cols, false));// 遍历网格中的每一个元素for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {// 如果当前元素为'1'(表示陆地)且没有被访问过if (grid[row][col] == '1' && !visit[row][col]) {bfs(grid, row, col, visit); // 执行BFS遍历nums++; // 每发现一个岛屿,岛屿数量+1}}}return nums; // 返回最终的岛屿数量}// BFS函数,用来遍历一个岛屿的所有部分void bfs(vector<vector<char>>& grid, int row, int col, vector<vector<bool>>& visit) {queue<pair<int, int>> q; // 用队列来辅助BFS遍历q.push({row, col}); // 将当前起始点加入队列visit[row][col] = true; // 标记该点为已访问// 方向数组,表示上下左右四个方向vector<vector<int>> dirs = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};// 当队列不为空时,持续执行BFSwhile (!q.empty()) {pair<int, int> temp = q.front(); // 获取队列头部的坐标q.pop(); // 弹出队列头部// 遍历当前节点的上下左右四个方向for (int i = 0; i < dirs.size(); i++) {int temp_row = temp.first + dirs[i][0]; // 计算新的行坐标int temp_col = temp.second + dirs[i][1]; // 计算新的列坐标// 检查新坐标是否在网格范围内,是否为'1',且未访问过if (temp_row >= 0 && temp_row < grid.size() && temp_col >= 0 && temp_col < grid[0].size() && grid[temp_row][temp_col] == '1' && !visit[temp_row][temp_col]) {q.push({temp_row, temp_col}); // 将新坐标加入队列visit[temp_row][temp_col] = true; // 标记该点为已访问}}}}
};
相关文章:
力扣第200题 岛屿数量
前言 记录一下刷题历程 力扣第200题 岛屿数量 岛屿数量 原题目: 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平…...
协议头,wireshark,http
目录 协议头 ip头 udp头 mac层 网络工具 telnet wireshark Http 一、HTTP 协议介绍 二、HTTP 协议的工作过程 三、使用抓包工具抓取报文 四、获取到http请求报文: 五、http请求(request) (一)、认识URL 项…...
vscode ssh离线远程连接ubuntu调试
遇见问题: 1 ssh连接上无法启动服务器的虚拟环境; 2 ssh连接上启动服务器的虚拟环境后无法打断点; 对于问题需要参考下面连接安装python和debugy的插件拓展,并且配置json文件link。VSCode - 离线安装扩展python插件教程_vscode…...
Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号
步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置…...
元学习之应用案例
现在在做元学习的时候,我们最常拿来测 试元学习技术的任务叫做少样本图像分类,简单来讲就是每一个任务都只有几张图片,每一 个类别只有几张图片。比如我们使用图1的案例为例说明。现在分类的任务是分为三个 类别,每个类别都只有两…...
网络高级(学习)2024.9.10
目录 一、Modbus简介 1.起源 2.特点 3.应用场景 二、Modbus TCP协议 1.特点 2.协议格式 3.MBAP报文头 4.功能码 5.寄存器 (1)线圈寄存器,类比为开关量,每一个bit都对应一个信号的开关状态。 (2)…...
【软件全文档】项目概要设计说明书(2024实际项目Word原件)
一、 引言 (一) 编写目的 (二) 范围 (三) 文档约定 (四) 术语 二、 项目概要 (一) 建设背景 (二) 建设目标 (三࿰…...
震惊!国产数据库厂商减少了51家!
前面文章我提到国产数据库厂商实际上大部分都不赚钱,我估计国产目前国产数据库厂商利润为正的,目前不超过5家。 而经济寒冬,融资困难,那么对于很多厂商,尤其是全靠融资的数据库厂商来讲,这将变得极其困难。…...
[AI书籍分享]<AI时代,学什么,怎么学 - 和渊>
本文由Markdown语法编辑器编辑完成。 1, 背景: 本书是一位清华大学毕业的生物学博士,和渊老师,现就职于人大附中, 是一名一线的高中生物教师. 她之前已经写过几本关于教育类的书籍,而这本书,则是她针对当前, AI时代迅猛发展的背…...
鸿蒙HarmonyOS开发:一次开发,多端部署(界面级)断点和媒体查询
文章目录 概述引入与使用流程媒体查询条件语法规则媒体类型(media-type)媒体逻辑操作(media-logic-operations)媒体特征(media-feature) 场景示例1、监听设备屏幕的方向(竖屏,横屏&a…...
1 Linux SSH安全加固_linux system-auth
 RabbitMQ详解
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理&…...
《华为 eNSP 模拟器安装教程》
1.电脑安装环境要求: 检查电脑是否安装过 eNSP 和依赖软件,如果有,请全部卸载。 安装软件列表: 2.软件安装: 安装 WinPcap: 打开安装包,单击【Next】 单击【I Agree】 单击【Install】 单击【…...
vector(二)vector模拟实现
vector成员变量是三个迭代器 vector的迭代器底层与string相同是使用 指针实现的 使用的是类模版T*指针 template<class T> class vector { public:typedef T* iterator;typedef const T* const_iterator; private:iterator _start nullptr;iterator _finish nullp…...
【Canvas与电脑桌面】用六角回旋镖铺满一个平面(1920*1080)
【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>六角回旋镖桌面1920x1080</title><style type"text/cs…...
创游系列开心娱乐完整组件
别人分享的一套东西,是个不错的娱乐源码,里面包含了很多小游戏。可以创建房间。 没测试自行研究吧,内含搭建教程。 代码免费下载:百度网盘...
高效驱动之选 ——KP85211ASGA 半桥栅极驱动器 内置互锁死区
KP85211A是一款 225V 耐压,具有 1A 拉电流和 1.5A 灌电流能力的半桥栅极驱动器,专用于驱动功率MOSFET或IGBT。采用高压器件工艺技术,具有良好的电流输出及出色的抗瞬态干扰能力。可保证开关节点 VS 瞬态 -7V 情况下系统正常工作。可支持开关节…...
建投数据获批安全生产许可证
9月1日,建投数据成功获批由北京市住房和城乡建设委员会核发的《安全生产许可证》。该资质的获得,是建投数据能力与实力的展现,更是对其企业规模、管理水平、项目业绩等的肯定。 《安全生产许可证》是国家为了加强安全生产监督管理,…...
MCU9.reg52.h的介绍
1.引用头文件的两种方式 #include <reg52.h> #include "reg52.h" 区别:优先搜索的位置不同! 在keil软件中 #include <reg52.h> 优先搜索软件安装的INC文件夹 #include "reg52.h" 优先搜索当前工程文件夹下的头文件,如果没有,则在软件安装的…...
Python知识点:如何使用Python进行二维码生成与识别
在Python中,生成和识别二维码可以使用不同的库来实现。最常用的库包括 qrcode 和 pyzbar。以下是如何使用这些库来生成和识别二维码的示例: 1. 生成二维码 你可以使用 qrcode 库来生成二维码。首先,你需要安装它: pip install …...
告别繁琐操作:Super IO插件实现Blender批量导入导出智能化解决方案
告别繁琐操作:Super IO插件实现Blender批量导入导出智能化解决方案 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io 在3D建模工作流中,最耗时的往往不是创意设计…...
【蒸汽波风格工业化生产标准】:基于1372张MJ出图数据建模,定义饱和度/噪点/复古失真三维黄金阈值
更多请点击: https://kaifayun.com 第一章:蒸汽波美学的数字解构与范式迁移 蒸汽波(Vaporwave)并非仅是一种视觉风格或音乐流派,而是一场对晚期资本主义数字界面的戏仿性考古——它通过降速采样、CRT扫描线模拟、80年…...
从串口调试到上位机显示:手把手教你用Python写一个STM32 OV2640的JPEG图传接收端
从串口调试到上位机显示:Python实现STM32 OV2640的JPEG图传接收端全解析 当STM32成功通过OV2640摄像头捕获JPEG图像并通过串口发送后,如何稳定接收、解析并实时显示这些数据成为开发者面临的下一个挑战。本文将深入探讨如何用Python构建一个高效可靠的上…...
chatgpt-web-midjourney-proxy的插件系统:扩展AI功能的开发指南
chatgpt-web-midjourney-proxy的插件系统:扩展AI功能的开发指南 在当今AI应用快速发展的时代,chatgpt-web-midjourney-proxy项目以其强大的插件系统脱颖而出,为开发者提供了无限扩展AI功能的可能性。这个项目不仅整合了ChatGPT、Midjourney和…...
深入eDP协议栈:从PSR SDP发送到Main Link开关,一次搞懂屏幕自刷新的完整信令流程
深入eDP协议栈:从PSR SDP发送到Main Link开关,一次搞懂屏幕自刷新的完整信令流程 在显示技术的演进中,嵌入式DisplayPort(eDP)协议因其高效能和低功耗特性,已成为移动设备和高端显示器的首选接口。其中&am…...
告别配置烦恼:一键脚本+环境变量,让你的Mac上Gradle(Homebrew版)和IDEA无缝协作
告别配置烦恼:一键脚本环境变量,让你的Mac上Gradle(Homebrew版)和IDEA无缝协作 作为一名长期在Mac上使用Gradle的开发者,你是否经历过这样的困扰:每次换新机器或升级Gradle版本后,都要手动查找libexec路径,…...
nuScenes数据集“平替”指南:Mini版够用吗?完整版、Test版到底怎么选?
nuScenes数据集选型实战指南:从Mini版到完整版的决策逻辑 第一次接触nuScenes数据集时,面对动辄几百GB的庞然大物和仅有3.9GB的mini版本,相信不少研究者都会陷入选择困难。这就像站在自助餐厅里,既想品尝所有美味,又担…...
SOCD Cleaner:游戏按键智能优化工具,告别操作冲突的终极方案
SOCD Cleaner:游戏按键智能优化工具,告别操作冲突的终极方案 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在竞技游戏和动作游戏中,精准的操作响应是胜利的关键。然而&…...
别再只会Hello World了!用Hadoop 3.x + Eclipse手把手搞定你的第一个MapReduce词频统计
从Hello World到实战:用Hadoop 3.x实现你的第一个词频统计项目 当你第一次接触编程时,"Hello World"可能是你学会的第一个程序。这个简单的程序让你理解了如何让计算机输出一段文字。但编程的世界远不止于此,特别是当你开始探索大数…...
parse库错误处理与异常管理:构建可靠的字符串解析应用
parse库错误处理与异常管理:构建可靠的字符串解析应用 【免费下载链接】parse Parse strings using a specification based on the Python format() syntax. 项目地址: https://gitcode.com/gh_mirrors/pa/parse 在Python开发中,字符串解析是一项…...
