200. 岛屿数量025(BFS详解)

在这里插入图片描述
在这里插入图片描述

二:思路

1.这里我们使用的是BFS(广度优先搜索遍历)
2.当我们遇到一个岛屿(‘1’)的时候,我们就对其的左右四边进行广度遍历
并且标记已经访问过的结点。
3.那么我们每次遇到一个1开始广度遍历那就证明我们发现了一个岛

三:上码

class Solution {
public:int numIslands(vector<vector<char>>& grid) {/**思路:1.这里我们使用的是BFS(广度优先搜索遍历)2.当我们遇到一个岛屿('1')的时候,我们就对其的左右四边进行广度遍历并且标记已经访问过的结点。3.那么我们每次遇到一个1开始广度遍历那就证明我们发现了一个岛   */int m = grid.size(); //表示矩阵的行int n = grid[0].size();// //表示矩阵的列int num_islands = 0;//表示岛屿的数量for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){queue<pair<int,int> >q;//创建一个队列,可以存两个值(行和列)if(grid[i][j] == '1'){q.push({i,j});grid[i][j] = '0';//访问过的话,将其设置为 0 num_islands++;}   while(!q.empty()){  auto temp = q.front();//这里的auto可以表示任何类型,所以当然包括我们的一个集合q.pop();int nr = temp.first;//集合的第一个元素(行)int nc = temp.second;//集合的第二个元素(列)//接下来看该位置的四周的值是否为1,为1的话那么接下来就扩大 岛屿的值//该位置的上方if(nr - 1 >= 0 && grid[nr-1][nc] == '1'){q.push({nr-1,nc});grid[nr-1][nc] = '0';}    //该位置的下方(这里小于 m,是因为我们的二维矩阵边界行的最大值为 m - 1  指的是在二维矩阵中的下标)if(nr + 1 <  m && grid[nr+1][nc] == '1'){q.push({nr+1,nc});grid[nr+1][nc] = '0';}//该位置的左方if(nc - 1 >= 0 && grid[nr][nc-1] == '1'){q.push({nr,nc-1});grid[nr][nc-1] = '0';}//该位置的右方if(nc + 1 < n && grid[nr][nc+1] == '1'){q.push({nr,nc+1});grid[nr][nc+1] = '0';}}}}return num_islands;}
};

在这里插入图片描述

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

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

相关文章

进击吧! Blazor 第一期

Blazor 是一个 Web UI 框架&#xff0c;可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程&#xff0c;它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术&#xff0c;但它使用 C&#xff03;语言和 Razor 语法代替 JavaScrip…

『软件工程2』详解软件工程和软件过程模型

文章目录一、软件工程的定义1、Fritz Bauer在NATO上给出的定义2、Barry Boehm3、IEEE在软件工程术语汇编中的定义二、软件工程的层次1、软件工程三个要素2、软件工程的层次——图解3、软件工程的层次——逐一分析三、软件过程的三个阶段1、定义阶段——“做什么”2、开发阶段—…

利用vector实现一对一(pair<int,int>)

一&#xff1a;前言 我们知道有一对一的STL容器有map容器&#xff0c;但是map容器中的按键值排序和不允许由重复的元素&#xff0c;现在&#xff0c;我们可以利用 vector<pair<int,int> >来实现一对一&#xff0c;但其没有排序可以允许有重复的元素 二&#xff1…

没有docker,谈什么微服务架构?

新的互联网技术时代已经来临了&#xff0c;容器、Kubernetes、DevOps、微服务、云原生代表着技术前进的方向&#xff0c;.NET Core微服务Docker&#xff0c;亦是当下最优解决方案(低调点&#xff0c;几乎没有之一)&#xff01;有点自夸&#xff1f;作为专注于.NET领域十多年的老…

『软件工程3』你应该知道的三种原型实现模型:抛弃式、演化式、增量式

三种原型实现模型一、抛弃式原型开发二、演化式原型开发三、增量式原型开发一、抛弃式原型开发 1、定义&#xff1a;验证和澄清系统的需求描述&#xff0c;重新构造系统。 2、流程图 3、典型例子 开发者与客户进行沟通交流&#xff0c;之后获取到客户的需求&#xff0c;于是…

『软件工程4』一文了解软件项目管理中的4P

软件项目管理中的4P一、项目管理的重要性和定义1、重要性&#xff08;两个阶段&#xff09;2、软件项目管理的定义二、管理四要素4P1、管理的四要素(4P)2、软件项目中影响最终结果的要素3、项目管理关心的问题三、项目参与者类型(people)四、项目小组结构(people)1、项目的三种…

8-1 回溯法实验报告 (15 分)(思路+详解)

一&#xff1a;题目 给定k个正整数&#xff0c;用算术运算符&#xff0c;-&#xff0c;&#xff0c;/ 将这k个正整数连接起来&#xff0c;是最终的得数恰为m。 如果有多组满足要求的表达式&#xff0c;只要输出一组&#xff0c;每一步算式用分号隔开。 如果无法得到m&#xff…

TypeScript 4.0 发布

喜欢就关注我们吧&#xff01;整体看来&#xff0c;此版本在兼容性方面没有特别大的变化。因为 TypeScript 团队表示新版本继续使用与过去版本相似的版本控制模型&#xff0c;可将 4.0 视作 3.9 的延续升级版本。而且他们也一直在追求不牺牲主要灵活性的情况下&#xff0c;提供…

『软件工程5』详解软件项目管理之软件的度量

软件项目管理——软件的度量一、度量的目的1、引例2、度量的目的3、度量的作用二、测量、度量和指标区别1、引例2、测量、度量和指标的区别3、思考题三、过程度量和项目度量1、过程2、项目四、度量的方式1、物理世界中的测量2、软件测量五、面向规模的度量1、定义2、有用度量的…

7-2 旅行售货员 (10 分)(TSP问题思路加详解)

一题目 某售货员要到若干城市去推销商品&#xff0c;已知各城市之间的路程(或旅费)。他要选定一条从驻地出发&#xff0c;经过每个城市一遍&#xff0c;最后回到驻地的路线&#xff0c;使总的路程&#xff08;或总旅费&#xff09;最小。 输入格式: 第一行为城市数n 下面n行…

从零开始内建你的安全测试流程

一、 安全测试的意义安全问题&#xff0c;没发生的时候我们可以侥幸&#xff0c;一旦发生生产安全问题&#xff0c;对很多公司来说可能就是黑天鹅事件了。平台的安全&#xff0c;是我们测试中不可舍弃的一环&#xff0c;而且需要长期持续的关注。二、 从哪里入手很多公司没有专…

『软件测试1』你需要了解的软件测试基础知识

软件测试基础一、 软件缺陷的概述1、什么是软件缺陷2、软件缺陷的类型3、软件缺陷的案例4、软件缺陷的产生原因5、软件缺陷的分类6、软件缺陷的处理流程7、多学一招&#xff1a;缺陷报告&#xff08;由测试人员完成&#xff09;8、常见软件缺陷管理工具9、修复软件缺陷的成本二…

直连路由和静态路由(实验)

一:概念 1:直连路由概念 根据 路由 器学习路由信息、生成并维护 路由表 的方法包括直连路由(Direct)、 静态路由 (Static)和 动态路由 (Dynamic)。直连路由&#xff1a;路由器接口所连接的子网的路由方式称为直连路由&#xff1b; 非直连路由&#xff1a;通过路由协议从别的路…

使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放

使用 GB28181.Solution ZLMediaKit MediaServerUI 进行摄像头推流和播放独立观察员 2020 年 8 月 25 日一、摄像机 GB28181 配置打开 国标 28181 配置页面&#xff0c;勾上 “接入使能”&#xff1a;打钩的是重要的配置信息&#xff0c;主要就是 SIP 服务器的信息和摄像头自己…

将 .NET Framework 项目转换为 .NET Standard 项目

将 .NET Framework 项目转换为 .NET Standard 项目独立观察员 2020 年 8 月 20 日如今 .NET Core 是未来发展的主流&#xff08;至少在 .NET 5 发布之前&#xff09;&#xff0c;而我们如果要改造一个项目为 .NET Core 项目&#xff0c;则它引用的项目应当先改造为 .NET Standa…

7-3 最短路径 (20 分)(分支限界+思路+详解)

一&#xff1a;题目 给定一个有N个顶点和E条边的无向图&#xff0c;顶点从0到N−1编号。请判断给定的两个顶点之间是否有路径存在。如果存在&#xff0c;给出最短路径长度。 这里定义顶点到自身的最短路径长度为0。 进行搜索时&#xff0c;假设我们总是从编号最小的顶点出发&a…

一份【软件工程】的学习指南已到达,请注意查收!!

软件工程——起始篇一、引言二、学习【软件工程】的原因1、软件设计师证书2、相关领域人员必备技能三、【软件工程】的学习方法1、不要盲目为了学习而学习2、规划学习路线四、结束语【软件工程】应该是大学计算机专业必修的一门课&#xff0c;对于开发者来说&#xff0c;可能有…

『软件工程6』详解软件项目管理之软件范围与估算

软件项目管理——软件范围与估算一、软件项目计划1、目标2、步骤二、软件范围1、软件范围定义2、软件范围——引例三、影响估算的因素四、软件项目资源1、软件项目资源构成2、分析图3、人力资源4、硬件资源5、软件工具6、可复用构件五、软件工作量与成本的估算1、基于LOC估算工…

【翻译】.NET 5 Preview8发布

今天&#xff0c;.NET 5预览8发布了&#xff0c;对于.NET5.0的功能开发已经完成了&#xff0c;这必须要排除待处理的bug&#xff0c;预览8是最后一次预览版本。预计11月正式的.NET5.0版本发布之前还将发布两个正式之前的候选版本&#xff0c;这篇文章描述了.NET5.0版本中的一系…

7-1 页面置换算法--FIFO (50 分)(思路详解)

一:题目 先初始化页面大小&#xff0c;和物理块数。连续输入页面的逻辑地址&#xff0c;以“-1”作为结束标志&#xff0c;采用FIFO页面置换算法、固定分配局部置换分配策略。输出该页面的页号和页内位移&#xff0c;若该页不在内存&#xff0c;并且还有剩余的物理块&#xff…