FloodFill算法——岛屿数量

文章目录

  • 题目解析
  • 算法解析
  • 代码解析

题目解析

岛屿数量
在这里插入图片描述
题目依旧是熟悉的配方,熟悉的味道,还是那个0还是那个1还是那个二维矩阵,这时候BFS和DFS闻着味就来了,我们来看一下这个题目,这个题目也很容易理解如下图有一个二维矩阵
在这里插入图片描述
在这里面0是海洋1是陆地但是如果两个1是相邻的那么就是一个陆地,最终求出陆地的数量我们来看一下这个样列不难看出陆地的数量是3个那么这里你看懂的话恭喜你这个题目的意思你就懂了

算法解析

那么这个问题应该采取何种思路和方法呢?还记得BFS的步骤嘛?走前走后走左右,顾前顾后顾左右,满足要求改为true,不满要求不进队,那么这个题目我们按照我编的这个句子来看一下,首先用两层for循环取遍历这里面所有的节点,当节点为1的时候我们就来看看,它的前后左右如果,然后将他的前后左右满足条件的进入队列,并将 加入队列的元素逐个遍历去获取他们的前后左右,并且这还不是最主要的是需要对我们遍历到的节点进行标记。从而保证符合要求的节点只会被我们遍历一次。

代码解析

class Solution {
public:int dx[4] = { 0,0,-1,1 };int dy[4] = { 1,-1,0,0 };bool vir[1010][1010];int numIslands(vector<vector<char>>& grid) {int ans = 0;int m = grid.size();int n = grid[0].size();for (int i = 0; i < grid.size(); i++) {for (int j = 0; j < grid[0].size(); j++) {if (grid[i][j] == '1' && vir[i][j] == false) {ans++;vir[i][j] = true;bfs(i, j, grid,m,n);}}}return ans;}void bfs(int i, int j, vector<vector<char>>&grid,int m,int n) {queue<pair<int, int>>q;q.push({ i,j });while (q.size()) {auto [a, b] = q.front();q.pop();for (int i = 0; i < 4; i++) {int x = a + dx[i];int y = b + dy[i];if (x >= 0 && x < m && y >= 0 && y < n && vir[x][y] == false && grid[x][y] == '1') {q.push({ x,y });vir[x][y] = true;}}}}
};

这个题目的代码就需要用到我们的标记位了,我们需要一个bool的数组来表示这个数组中的节点哪些符合要求并且已经被遍历到了,遍历到的节点未来就不作数了,除了这个区别其余的其实跟之前的图像渲染差不多。

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

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

相关文章

【每日一问】IOS手机上Charles证书过期怎么办?

1、如何查看证书是否过期? 设置>通用>VPN与设备管理 2、在Charles中重置证书 步骤1&#xff1a;重置证书 Help>SSL Proxying>Reset Charles Root Certificate… 步骤2&#xff1a;在浏览器中&#xff0c;下载证书 首先&#xff0c;手机连上代理&#xff0c;然…

qt+ffmpeg 实现音视频播放(三)之视频播放

一、视频播放流程 &#xff08;PS&#xff1a;视频的播放流程跟音频的及其相似&#xff01;&#xff01;&#xff09; 1、打开视频文件 通过 avformat_open_input() 打开媒体文件并分配和初始化 AVFormatContext 结构体。 函数原型如下&#xff1a; int avformat_open_inpu…

Sphinx使用md文档构建失败

​使用 sphinx 构建文档&#xff0c;有时候已经放置好了文档却无法读入生成。 解决方案 在环境中下载安装好相应的库: pip install sphinx_markdown_tablespip install m2r打开生成的 source目录下的 conf.py&#xff0c;文件&#xff0c;在文件中加入&#xff1a; extensio…

19.C++20中的std::latch和std::barrier

文章目录 线程闩std::latch和线程卡std::barrier线程闩std::latch线程卡std::barrier的使用线程闩std::latch和线程卡std::barrier的区别reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 线程闩std::latch和线程卡std::barrier …

Java项目:71 ssm基于ssm+vue的外卖点餐系统+vue

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统功能 系统分为前台订餐和后台管理&#xff1a; 1.前台订餐 用户注册、用户登录、我的购物车、我的订单、商品列表 2.后台管理 商品管理&#xf…

QT tableWidget横向纵向设置

横向控件 要设置QTabWidget选项卡的字体方向&#xff0c;可以使用QTabWidget的setTabPosition()方法。通过传递Qt枚举值QTabWidget.east或QTabWidget.west作为参数&#xff0c;可以设置选项卡的字体方向为从左到右或从右到左。 myTabWidget QTabWidget() myTabWidget.setTabP…

Grass手机注册使用教程,利用闲置手机WiFi带宽赚钱

文章目录 Grass是什么&#xff1f; 项目介绍Grasss手机使用步骤第一步&#xff1a;下载狐猴浏览器第二步&#xff1a;注册账户&#xff08;已注册直接跳过&#xff09;第三步&#xff1a;安装Grass Chrome插件1、推荐离线安装2、在线安装 第四步&#xff1a;登录第五步&#xf…

MySQL 更新执行的过程

优质博文&#xff1a;IT-BLOG-CN Select语句的执行过程会经过连接器、分析器、优化器、执行器、存储引擎&#xff0c;同样的 Update语句也会同样走一遍 Select语句的执行过程。 但是和 Select最大不同的是&#xff0c;Update语句会涉及到两个日志的操作redo log&#xff08;重做…

Flutter-excel导入多语言脚本使用步骤

Flutter-excel导入多语言脚本使用步骤 1.下载Node.js brew install node2.输入以下命令来验证Node.js是否已经成功安装&#xff1a; node -v如果一切正常&#xff0c;Node.js应该会显示其版本信息。&#xff08;我这里直接显示了&#xff09; 如果不正常&#xff0c;需要看…

CSS 逻辑属性

css逻辑属性 CSS 逻辑属性与值是 CSS 的一个模块,其引入的属性与值能做从逻辑角度控制布局,而不是从物理、方向或维度来控制。 物理属性(left、right、top、bottom);逻辑属性(start、end) CSS 逻辑属性是一组属性,允许开发人员创建对不同屏幕尺寸和语言响应更快的布…

欧科云链OKLink:坎昆升级后,Layer2项目是否更具竞争力?

在坎昆升级激活之际&#xff0c;OKLink 上线以太坊坎昆升级 Dencun 专题页 &#x1f449; 从专业链上数据分析角度&#xff0c;带来一场充实且即时的 Layer2 数据盛宴。 在近日由 137Labs 发起&#xff0c;Cointime 主持的 Layer2 生态专场讨论中&#xff0c;OKLink 产品…

AndroidStudio插件出现“Compatible with IntelliJ IDEA only“错误时的解决方案

原因:插件比较老&#xff0c;配置可能存在问题 1.修改plugins文件夹下的jar包(插件) 找到AndroidStudio所在位置 打开plugins文件夹,找到需要修改的jar包,通过压缩软件用zip方式打开&#xff0c;找到\META-INF\plugin.xml并编辑&#xff0c;在<version>xxxx</versi…

docker基础(七)之docker start/stop/kill/restart/pause/unpause

文章目录 概述命令速查docker start语法OPTIONS详解&#xff1a; docker stop语法OPTIONS详解&#xff1a; docker restart语法OPTIONS详解&#xff1a;示例和说明 docker kill语法OPTIONS说明&#xff1a; docker pause语法示例 docker unpause语法示例 docker stop 和docker …

InnoDB 缓存

本文主要聊InnoDB内存结构, 先来看下官网Mysql 8.0 InnoDB架构图 MySQL :: MySQL 8.0 Reference Manual :: 17.4 InnoDB Architecture 如上图所示,InnoDB内存主要包含Buffer Pool, Change Buffer, Log Buffer, Adaptive Hash Index Buffer Pool 其实 buffer pool 就是内存中的…

Python---常用的web框架

Django 特点&#xff1a;Django是一个全功能的Web框架&#xff0c;提供了许多内置的功能和工具&#xff0c;如ORM、表单处理、认证等。它的设计理念是“一切都包含在框架中”&#xff0c;因此适合构建复杂的、大型的Web应用程序。优势&#xff1a;Django具有强大的开发效率和稳…

练习实践-进程回收01-找到并清理僵尸进程

参考来源&#xff1a; https://blog.csdn.net/qq_36528114/article/details/71076110 https://blog.51cto.com/u_12083623/2363384 极客时间-性能优化实战-CPU性能篇 进程回收中的孤儿和僵尸进程的特点 演示环境&#xff1a; 操作系统&#xff1a;Ubuntu18.04 查询工具&#x…

Golang案例开发之gopacket抓包三次握手四次分手(3)

文章目录 前言一、理论知识三次握手四次分手二、代码实践1.模拟客户端和服务器端2.三次握手代码3.四次分手代码验证代码完整代码总结前言 TCP通讯的三次握手和四次分手,有很多文章都在介绍了,当我们了解了gopacket这个工具的时候,我们当然是用代码实践一下,我们的理论。本…

Java 基础学习(二十)Maven、XML与WebServer

1 Maven 1.1 什么是Maven 1.1.1 Maven概述 Maven是一种流行的构建工具&#xff0c;用于管理Java项目的构建&#xff0c;依赖管理和项目信息管理。它使用XML文件来定义项目结构和构建步骤&#xff0c;并使用插件来执行各种构建任务。Maven可以自动下载项目依赖项并管理它们的…

【Sqoop教程】Sqoop学习教程以相关资料

当使用Sqoop进行数据传输时&#xff0c;以下是更详细的步骤和示例&#xff1a; 步骤1&#xff1a;安装和配置Sqoop 下载Sqoop并解压缩到指定目录。配置sqoop-env-template.sh文件&#xff0c;设置JAVA_HOME、HADOOP_COMMON_HOME等环境变量&#xff0c;并另存为sqoop-env.sh。…

PMSM 永磁同步电机滑膜控制 SVPWM矢量控制 matlab simulink 仿真

仿真搭建平台&#xff1a; (1)该模型采用matlab/simulink 2016b版本搭建&#xff0c;使用matlab 2016b及以上版本打开最佳; (2)该模型已经提前转换了各个常用版本&#xff08;最低为matlab2012b&#xff09;&#xff0c;防止出现提示版本过高的情况。 模型截图&#xff1a; 算…