第五十一天 第十一章:图论part02 99.岛屿数量 深搜 99.岛屿数量 广搜 100.岛屿的最大面积

 99.岛屿数量 深搜 

其实就是求连通块的数量,理解两个容器的作用。

grid表示该位置是否为岛屿,vis表示该位置是否被标记过(遇到一个没有遍历过的节点陆地,计数器就加一,然后把该节点陆地所能遍历到的陆地都标记上。)

#include<iostream>
#include<vector>
using namespace std;
int dir[4][2]={0,-1,0,1,-1,0,1,0};
void dfs(const vector<vector<int>> &grid,vector<vector<bool>> &vis,int x,int y){for(int i=0;i<4;i++){int next_x = x+dir[i][0];int next_y = y+dir[i][1];if(next_x<0||next_x>=grid.size()||next_y< 0||next_y>=grid[0].size())  continue; if(grid[next_x][next_y]==1&&!vis[next_x][next_y]){vis[next_x][next_y]=true;dfs(grid,vis,next_x,next_y);}}
}
int main(){int N,M;cin>>N>>M;vector<vector<int>> grid(N,vector<int>(M));for(int i=0;i<N;i++){for(int j=0;j<M;j++){cin>>grid[i][j];}}vector<vector<bool>> vis(N,vector<bool>(M,false));  //相邻是否为岛屿int result=0;for(int i=0;i<N;i++){for(int j=0;j<M;j++){if(!vis[i][j]&&grid[i][j]==1){result++;vis[i][j]=true;dfs(grid,vis,i,j);}}}cout << result << endl;
}

 广搜  

两个二维容器的作用同上。

超时的原因根本原因是只要加入队列就代表走过,就需要标记,而不是从队列拿出来的时候再去标记走过

所以我们将符合条件的值加入到队列的同时,我们应该将其进行标记,即对应的vis标记为true;

#include<iostream>
#include<vector>
#include <queue>
using namespace std;
int dir[4][2]={0,-1,0,1,-1,0,1,0};
void bfs(const vector<vector<int>> &grid,vector<vector<bool>> &vis,int x,int y){queue<pair<int,int>> que;que.push({x,y});vis[x][y]=true;while(!que.empty()){pair<int,int> cur=que.front();que.pop();for(int i=0;i<4;i++){int next_x = cur.first+dir[i][0];int next_y = cur.second+dir[i][1];if(next_x<0||next_x>=grid.size()||next_y< 0||next_y>=grid[0].size())  continue; if(grid[next_x][next_y]==1&&!vis[next_x][next_y]){vis[next_x][next_y]=true;que.push({next_x,next_y});}}}
}
int main(){int N,M;cin>>N>>M;vector<vector<int>> grid(N,vector<int>(M));for(int i=0;i<N;i++){for(int j=0;j<M;j++){cin>>grid[i][j];}}vector<vector<bool>> vis(N,vector<bool>(M,false));  //相邻是否为岛屿int result=0;for(int i=0;i<N;i++){for(int j=0;j<M;j++){if(!vis[i][j]&&grid[i][j]==1){result++;bfs(grid,vis,i,j);}}}cout << result << endl;
}

100.岛屿的最大面积 

深搜广搜都可以,主要是记录下每个岛屿中小岛屿的个数,每个小岛屿面积都是1。

#include<iostream>
#include<vector>
using namespace std;
int dir[4][2]={0,-1,0,1,-1,0,1,0};
int count=0;
void dfs(const vector<vector<int>> &grid,vector<vector<bool>> &vis,int x,int y){for(int i=0;i<4;i++){int next_x = x+dir[i][0];int next_y = y+dir[i][1];if(next_x<0||next_x>=grid.size()||next_y< 0||next_y>=grid[0].size())  continue; if(grid[next_x][next_y]==1&&!vis[next_x][next_y]){vis[next_x][next_y]=true;count++;dfs(grid,vis,next_x,next_y);}}
}
int main(){int N,M;cin>>N>>M;vector<vector<int>> grid(N,vector<int>(M));for(int i=0;i<N;i++){for(int j=0;j<M;j++){cin>>grid[i][j];}}vector<vector<bool>> vis(N,vector<bool>(M,false));  //相邻是否为岛屿int result=0;for(int i=0;i<N;i++){for(int j=0;j<M;j++){if(!vis[i][j]&&grid[i][j]==1){count=1;vis[i][j]=true;dfs(grid,vis,i,j);result=max(result,count);}}}cout << result << endl;
}

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

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

相关文章

leetcode日记(51)不同路径Ⅱ

和上一道题&#xff08;无障碍物的最短路径&#xff09;很像&#xff0c;但事实上比上一题多了优化方法 根据上一题改的代码如下&#xff0c;添加了对障碍物的判定&#xff0c;如果有障碍物则将数组值设为0。 class Solution { public:int uniquePathsWithObstacles(vector&l…

Python3网络爬虫开发实战(4)数据的存储

文章目录 一、文本文件存储1. os 文件 mode2. TXT3. JSON4. CSV 二、数据库存储1. SQLAlchemy2. MongoDB3. Redis1) 键操作2) 字符串操作3) 列表操作4) 集合操作5) 有序集合操作6) 散列操作 4. Elasticsearch1) 检索数据&#xff1a;利用 elasticsearch-analysis-ik 进行分词2)…

【PyCharm】PyCharm 2024.1 的最新变化-代码补全与智能提示

目录 代码补全与智能提示 更智能的代码补全功能 基于机器学习的代码建议 上下文相关的代码片段推荐 全行代码补全支持 (JavaScript 和 TypeScript) 本地 ML 模型的全行补全 示例 示例 1: 基于上下文的代码建议 示例 2: 全行代码补全 详细对比示例 示例 3: 传统代码补…

[Vulnhub] Raven2 PHPMailer-RCE+MSQP:Mysql权限提升

信息收集 IP AddressOpening Ports192.168.101.160TCP:22,80,111,46606 $ nmap -p- 192.168.101.160 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u4 (protocol 2.0) | ssh-hostkey: | 1024 26:81:c1:f…

数据结构 链式存储 +

int DeleteLinkList(LinkList *list, char *name); int ReviseLinkList(LinkList *list, char *name, DATATYPE data); int DestroyLinkList(LinkList *list); int InsertTailLinkList(LinkList *list, DATATYPE data); ​​​​​​​删除 修改​​​​​​​ 销毁 ​​​​​…

Anaconda +Pytorch安装教程

Anaconda Pytorch安装教程 Anaconda安装 小土堆的安装教程&#xff1a;PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】_哔哩哔哩_bilibili Free Download | Anaconda 这里自己选一个文件夹安装即可 第一个红框表示添加图标到开始菜…

CentOS配置NTP服务

更改配置文件 [rootController ~]# vim /etc/chrony.conf 重启服务并设置为开机自启动 [rootController ~]# systemctl restart chronyd.service [rootController ~]# systemctl enable chronyd.service 在另一台CentOS测试 更改配置文件 [rootCompute ~]# vim /etc/chron…

magento2 安装win环境和linux环境

win10 安装 安装前提&#xff0c;php,mysql,apach 或nginx 提前安装好 并且要php配置文件里&#xff0c;php.ini 把错误打开 display_errorsOn开始安装 检查环境 填写数据库信息 和ssl信息&#xff0c;如果ssl信息没有&#xff0c;则可以忽略 填写域名和后台地址&#xff0…

websocket通信问题排查思路

websocket通信问题排查思路 一、websocket连接成功&#xff0c;但数据完全推不过来。 通过抓包发现&#xff0c;是回包时间太长超过了1分钟导致的。这种通常是推送数据的线程有问题导致的。 正常抓包的情况如下&#xff1a; 二、大量数据可以正常推送成功&#xff0c;不定时…

matlab笔记 - 最小二乘法拟合直线的原理与实现

最小二乘法拟合直线原理与实现 一、引言二、原理概述1. 建模思路2.误差函数3.求解最优参数 三、matlab实现最小二乘法拟合直线1.直接代码实现2.MATLAB内置函数实现 四、扩展统计学与回归分析经济学工程学图像处理机器学习 一、引言 最小二乘法&#xff08;Least Squares Metho…

Java成为最适合中国人体质编程语言的缘由

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c;点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 语言的流行度Java在中国的普及…

Mybatis(四)特殊SQL的查询:模糊查询、批量删除、动态设置表明、添加功能获取自增的主键

实体类&#xff1a; 数据库&#xff1a; 1、模糊查询 方案一&#xff1a; 不适用#{ }&#xff0c;’%?%‘ 问号是属于字符串的一部分 不会被解析成占位符&#xff0c;会被当作是我们字符串的一部分来解析&#xff0c;所以我们执行的语句中找不到占位符&#xff0c;但是我们却…

WEB前端11-Vue2基础01(项目构建/目录解析/基础案例)

Vue2基础(01) 1.Vue2项目构建 步骤一&#xff1a;安装前端脚手架 npm install -g vue/cli步骤二&#xff1a;创建项目 vue ui步骤三&#xff1a;运行项目 npm run serve步骤四&#xff1a;修改vue相关的属性 DevServer | webpack //修改端口和添加代理 const { defineCo…

车载录像机:移动安全领域的科技新星

随着科技的飞速发展&#xff0c;人类社会的各个领域都在不断经历技术革新。其中&#xff0c;车载录像机作为安防行业与汽车技术结合的产物&#xff0c;日益受到人们的关注。它不仅体现了人类科技发展的成果&#xff0c;更在安防领域发挥了重要作用。本文将详细介绍车载录像机的…

在MATLAB中使用importrobot导入机械臂刚体树时没有找到模型文件,只显示坐标;改为使用loadrobot

没有mesh文件夹&#xff0c;所以找不到模型文件 改为使用loadrobot,直接加载刚体树数据

Unity中实现动画效果的几种方式

在Unity中&#xff0c;除了使用Animator组件实现动画效果外&#xff0c;还有其他几种方法可以实现动画效果&#xff0c;适用于不同的场景和需求。以下是一些常见的替代方法&#xff1a; 1. 骨骼动画&#xff08;Skinned Mesh Renderer&#xff09; Skinned Mesh Renderer&…

DataFrame RHS语法查询语句

RHS:https://github.com/acoboh/query-filter-jpa/blob/main/README.md 规则&#xff1a; 查询字段名:查询条件(条件值) 关系符 查询字段名:查询条件(条件值) ... 查询条件有&#xff1a; ‒ eq: 等于 ‒ gt: 大于 ‒ gte: 大于等于 ‒ lt: 小于 ‒ lte: 小于等于 ‒ ne: 不等于…

Windows-PowerShell常用命令

一、网络驱动器管理 查看网络驱动器 net use删除网络驱动器 net use <盘符> /delete # 例如&#xff1a;net use Z&#xff1a;/delete

[读论文] LawBench: Benchmarking Legal Knowledge of Large Language Models

Abstract LLM 在各个方面都表现出了强大的能力。然而&#xff0c;当将它们应用于高度专业化、安全关键的法律领域时&#xff0c;尚不清楚他们拥有多少法律知识以及他们是否能够可靠地执行与法律相关的任务。为了弥补这一差距&#xff0c;文章提出了一个综合性评估基准 LawBench…

【SpringBoot】5 Swagger

官网 https://swagger.io/ 介绍 Swagger 是一套基于 OpenAPI 规范构建的开源工具&#xff0c;可以帮助开发者实现设计、构建、记录、使用 Rest API。 Swagger 是一款根据 Restful 风格生成的接口开发文档&#xff0c;并且支持做测试的一款中间软件。 Swagger主要包括三部分&…