代码随想录算法训练营第六十五天 | 岛屿数量 深搜、岛屿数量 广搜、岛屿的最大面积

岛屿数量 深搜

题目链接:99. 岛屿数量

文字讲解:99. 岛屿数量 | 代码随想录

解题思路

本题已经说明,只有水平方向和竖直方向才能组成岛屿 

本题思路,是遇到一个没有遍历过的节点陆地,计数器就加一,然后把该节点陆地所能遍历到的陆地都标记上。 

#include<bits/stdc++.h>
using namespace std;
int dir[4][2] = {0,1,1,0,0,-1,-1,0};
void dfs(const vector<vector<int>>& grid ,vector<vector<bool>>& visited , int x, int y)
{if(visited[x][y] || grid[x][y] == 0){return;    //访问过了,或者遇到海水后就返回}visited[x][y] = true;for(int i =0 ; i<4; i++){int nextx = x + dir[i][0];int nexty = y + dir[i][1];int n = grid.size();int m = grid[0].size();if(nextx<0 || nextx >=n || nexty < 0 || nexty >= m)continue;   //如果越界了,就直接下一个dfs(grid,visited,nextx,nexty);}
}int main()
{int result,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];}}result = 0 ;   //目前岛屿为0for(int i =0 ; i< n ; i++){for(int j =0 ; j< m ; j++){if(!visited[i][j] && grid[i][j]==1){//没有访问过,并且是陆地的话result++;dfs(grid,visited,i,j);}}}cout<< result << endl;
}

岛屿数量 广搜

题目链接:99. 岛屿数量

文字讲解:99. 岛屿数量 | 代码随想录

解题思路

本题的思路是一样的

但是切记,入队就是标记为访问过了,否则会重复入队,如下图

 

#include<bits/stdc++.h>
using namespace std;
int dir[4][2] = {0,1,1,0,0,-1,-1,0};
void bfs(const vector<vector<int>>& grid ,vector<vector<bool>>& visited , int x, int y)
{queue<pair<int,int>> que;que.push({x,y});visited[x][y] = true;   //入队就代表访问过了while(!que.empty()){pair<int,int> cur = que.front();que.pop();int curx = cur.first;int cury = cur.second;for(int i =0 ;i<4 ; i++){int nextx = curx + dir[i][0];int nexty = cury + dir[i][1];int n = grid.size();int m = grid[0].size();if(nextx<0 || nextx >= n || nexty<0 || nexty >= m)continue;   //越界就继续if(!visited[nextx][nexty]  && grid[nextx][nexty] == 1){que.push({nextx,nexty});visited[nextx][nexty] = true;}}}
}int main()
{int result,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];}}result = 0 ;   //目前岛屿为0for(int i =0 ; i< n ; i++){for(int j =0 ; j< m ; j++){if(!visited[i][j] && grid[i][j]==1){//没有访问过,并且是陆地的话result++;bfs(grid,visited,i,j);}}}cout<< result << endl;
}

岛屿的最大面积

题目链接:100. 岛屿的最大面积
文字讲解:100. 岛屿的最大面积 | 代码随想录

解题思路

与上两题一样的思路,这里使用广搜

using namespace std;
#include <bits/stdc++.h>
int dir[4][2] = {0,1,1,0,0,-1,-1,0};
void bfs(const vector<vector<int>>& grid , vector<vector<bool>>& visited , int x , int y, int& area)
{queue<pair<int,int>> que;que.push({x,y});visited[x][y] = true;area +=1;    //第一个点也是面积while(!que.empty()){pair<int,int> cur = que.front();que.pop();int curx = cur.first;int cury = cur.second;for(int i=0 ; i<4; i++){int nextx = curx + dir[i][0];int nexty = cury + dir[i][1];int n = grid.size();int m = grid[0].size();if(nextx<0 || nextx>= n || nexty < 0 || nexty >=m)continue;if(!visited[nextx][nexty] && grid[nextx][nexty]==1){que.push({nextx,nexty});visited[nextx][nexty] = true;area+=1;}}}
}int main()
{int result = 0;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];}}for(int i =0 ; i<n ; i++){for(int j =0 ;j < m; j++){if(!visited[i][j] && grid[i][j]==1){int area = 0;bfs(grid,visited,i,j,area);result = max(result,area);}}}cout << result << endl;
}

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

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

相关文章

为电脑小白推荐的5款实用工具软件

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 1.磁盘空间分析——TreeSize Free ​ TreeSize Free是一款免费的磁盘空间分析工具&#xff0c;能够扫描…

Sip协议(四) -注册流程

Sip协议(四) -注册流程 本文主要介绍下sip协议中, agent的注册流程. 一: 流程图 简单的流程图如下: agent发起注册fs 返回401 ,并携带WWW-Authenticateagent第二次发起注册,增加Authorizationfs返回授权成功, 或者失败. 二: sip流程 发起注册REGISTER 首先agent发起注册请求…

重磅!鹅厂大牛带你30分钟玩转AI智能结对编程!

在大模型时代&#xff0c;人工智能技术的突破性进展正重塑着软件开发的面貌。AI的融入不仅优化了代码编写过程&#xff0c;更开启了智能编程的新纪元&#xff0c;为开发者带来了前所未有的工作效率和创新可能。AI结对编程不仅能够极大提升研发效率&#xff0c;还能通过智能分析…

Java基础入门day65

day65 web项目 页面设计 仿照小米官网&#xff0c;将首页保存到本地为一个html页面&#xff0c;再将html页面保存为jsp页面&#xff0c;在项目中的web.xml文件中配置了欢迎页 <welcome-file-list><welcome-file>TypesServlet</welcome-file> </welcome-…

linux源码编译

1/进入源码目录 cd linux.4.9.1 2. 从当前机器的启动目录拷贝配置信息到源代码目录。这步操作的意思是我们编译内核的配置采用用当前环境一致的配置。 cp -v /boot/config-$(uname -r) .config 3.配置界面 make menuconfig 4/先编译所有模块&#xff0c;确保正确 make -j…

【查缺补漏】python

python查缺补漏 底板除 还有一种除法是//&#xff0c;称为地板除&#xff0c;两个整数的除法仍然是整数&#xff1a; >>> 10 // 3 3你没有看错&#xff0c;整数的地板除//永远是整数&#xff0c;即使除不尽。要做精确的除法&#xff0c;使用/就可以。 因为//除法只…

rsa加签验签C#和js、java、微信小程序互通

js实现rsa加签验签 https://github.com/kjur/jsrsasign 11.1.0版本 解压选择需要的版本&#xff0c;这里选择all版本了 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>JS RSA加签验签</title&g…

有趣网站分享 - 生成 O‘Reilly 类型封面

文章目录 网站介绍效果 网站介绍 –> O’RLY 封面工厂 https://orly.nanmu.me 你可以… 设置文本内容 选择图片 选择颜色 效果 2024-06-20&#xff08;四&#xff09;

机器人----控制方式

位置控制 点位控制 点到点--PTP 只关心起点和目标点&#xff0c;不关心走过的轨迹。 连续轨迹控制 CP(continus path) eg&#xff1a;焊接&#xff0c;切割。 力控制 使用多大的力进行控制。 eg:用多大的力写字。

2.java pom.xml 添加配置说明

目录 1项目坐标&#xff1a; 2项目依赖&#xff1a; 3项目构建配置&#xff1a; 4项目属性&#xff1a; 5.项目信息&#xff1a; 6.项目分发管理&#xff1a; 7.项目插件配置&#xff1a; 8.项目依赖管理&#xff1a; pom.xml 是 Maven 项目的核心配置文件&#xff0c…

LSTM学习资料

这里写自定义目录标题 1.一个大二学生对LSTM的理解 https://www.bilibili.com/video/BV1jp421d7f8/?spm_id_from333.999.0.0&vd_sourcecc2da879c044059d9838f660bcaf4664 2.【LSTM从入门到精通】2小时带你掌握LSTM算法&#xff01; https://www.bilibili.com/video/BV1yb4…

Vim入门教程

Vim是一个高度可配置的文本编辑器&#xff0c;用于创建和修改各种类型的文本文件。以下是一些基本的Vim使用示例&#xff0c;展示如何在Vim中进行编辑和操作。 1. 打开和保存文件 打开一个名为example.txt的文件&#xff1a; vim example.txt 打开多个文件&#xff0c;使用大…

前端网页开发学习(HTML+CSS+JS)有这一篇就够!

目录 HTML教程 ▐ 概述 ▐ 基础语法 ▐ 文本标签 ▐ 列表标签 ▐ 表格标签 ▐ 表单标签 CSS教程 ▐ 概述 ▐ 基础语法 ▐ 选择器 ▐ 修饰文本 ▐ 修饰背景 ▐ 透明度 ▐ 伪类 ▐ 盒子模型 ▐ 浮动 ▐ 定位 JavaScript教程 ▐ 概述 ▐ 基础语法 ▐ 函数 …

契约锁电子签章平台 add 远程命令执行漏洞复现(XVE-2023-23720)

0x01 产品简介 契约锁电子签章平台是上海亘岩网络科技有限公司推出的一套数字签章解决方案。契约锁为中大型组织提供“数字身份、电子签章、印章管控以及数据存证服务”于一体的数字可信基础解决方案,可无缝集成各类系统,让其具有电子化签署的能力,实现组织全程数字化办公。通…

还在为Android开发找不到图片测试资源发愁吗? DummyImage来助你加速开发

使用 DummyImage 模拟电影应用数据 在开发和测试过程中&#xff0c;模拟数据是不可或缺的工具。它可以帮助我们在没有真实数据的情况下测试应用程序的功能和性能。本文将介绍如何使用 [DummyImage]https://dummyimage.com生成占位符图像来模拟电影应用的数据&#xff0c;并深入…

GDPU unity游戏开发 序幕

“我游戏都玩不明白&#xff0c;还让我做游戏o(≧口≦)o”还在为课程烦恼&#xff0c;本文重点在于&#xff0c;一学期摸鱼必过指南。持续更新中&#xff0c;没更完会有点乱哈。 小题 课本课后习题答案 第一章 1 2 3 4 5 6 7 8 9 10 A D A ABCD ABD AB BCD B…

PostgreSQL源码分析—— ValueScan

本文以select * from (values (1,1),(2,2)) as foo;为例&#xff0c;分析一下ValueScan其源码执行过程。 语法解析层 Select SQL语句字符串输入到数据库后&#xff0c;会首先在语法解析层表示成抽象语法树SelectStmt&#xff0c;进而经过语义分析&#xff0c;转换为查询树Que…

1.动手学习深度学习课程安排及深度学习数学基础

视频资源B站:动手学习深度学习——李沐 目录 目标内容将学到什么1.N维数组样例2.访问2维数组元素3.数据操作4.线性代数5.矩阵计算6.自动求导目标 介绍深度学习景点和最新模型 LeNet AlexNet VGG ResNet LSTM BERT…机器学习基础 损失函数,目标函数,过拟合,优化实践 使用py…

SNMP学习

文章目录 前言基本介绍端口和网络层特性工作原理应用场景版本总结 前言 SNMP&#xff08;Simple Network Management Protocol&#xff0c;简单网络管理协议&#xff09;是一种应用层协议&#xff0c;用于网络管理&#xff0c;允许网络管理员监控和管理网络设备的状态和配置。…

专家观点∣企企通采购供应链数字化总监于海生:如何利用数字化技术重构采购流程,推动企业降本增效?

摘要 数字化转型现已成为企业提升竞争力、实现降本增效的必由之路。企业应主动参与到数字经济的建设中&#xff0c;以数据资源为关键要素&#xff0c;以现代信息网络为主要载体&#xff0c;以信息通信技术的有效使用作为效率提升和经济结构优化的重要推动力的一系列经济活动&a…