【Day44 LeetCode】图论问题 Ⅱ
一、图论问题 Ⅱ
1、岛屿的最大面积
这题和上一篇博客求岛屿数量如出一辙,都是要找出所有岛屿,深度优先搜索代码如下:
# include<iostream>
# include<vector>using namespace std;int dfs(vector<vector<int>> &graph, int i, int j){if(i<0 || i>=graph.size() || j<0 || j>=graph[0].size() || graph[i][j]!=1)return 0;graph[i][j] = 2;return 1 + dfs(graph, i+1, j)+ dfs(graph, i-1, j)+ dfs(graph, i, j+1)+ dfs(graph, i, j-1);
}int main(){int n, m;cin >> n >> m;vector<vector<int>> graph(n, vector<int>(m));for(int i=0; i<n; ++i)for(int j=0; j<m; ++j)cin >> graph[i][j];int ans = 0;for(int i=0; i<n; ++i)for(int j=0; j<m; ++j)if(graph[i][j]==1)ans = max(ans, dfs(graph, i, j));cout << ans << endl;return 0;
}
广度优先搜索代码如下:
# include<iostream>
# include<vector>
#include<queue>using namespace std;vector<vector<int>> dirs({{0, 1}, {0, -1}, {1, 0}, {-1, 0}});
int bfs(vector<vector<int>> &graph, int ii, int jj){queue<pair<int, int>> q;q.push({ii, jj});graph[ii][jj] = 2;int res = 0;while(!q.empty()){auto cur = q.front(); q.pop();++res;for(auto xy : dirs){int i = cur.first + xy[0], j = cur.second + xy[1];if(i<0 || i>=graph.size() || j<0 || j>=graph[0].size() || graph[i][j]!=1)continue;graph[i][j] = 2;q.push({i, j});}}return res;
}int main(){int n, m;cin >> n >> m;vector<vector<int>> graph(n, vector<int>(m));for(int i=0; i<n; ++i)for(int j=0; j<m; ++j)cin >> graph[i][j];int ans = 0;for(int i=0; i<n; ++i)for(int j=0; j<m; ++j)if(graph[i][j]==1)ans = max(ans, bfs(graph, i, j));cout << ans << endl;return 0;
}
2、孤岛总面积
本质上还是要搜索所有岛屿,同时还得统计岛屿面积,将是孤岛的面积累加。这就涉及到不是孤岛的判断,遇到边界就不是孤岛,这个不要加入结果,我们只需要让函数的统计结果减去一个很大的数,从而保证不是孤岛的返回值是负数就好,最后结果只累加正数。这个能在之前的代码下做出最小的改动。
深度优先搜索代码如下:
# include<iostream>
# include<vector>using namespace std;int dfs(vector<vector<int>> &graph, int i, int j){if(i<0 || i>=graph.size() || j<0 || j>=graph[0].size() || graph[i][j]!=1)return 0;graph[i][j] = 2;int res = 1;if(i==0 || j==0 || i==graph.size()-1 || j==graph[0].size()-1)res -= 10000;res += dfs(graph, i+1, j)+ dfs(graph, i-1, j)+ dfs(graph, i, j+1)+ dfs(graph, i, j-1);return res;
}int main(){int n, m;cin >> n >> m;vector<vector<int>> graph(n, vector<int>(m));for(int i=0; i<n; ++i)for(int j=0; j<m; ++j)cin >> graph[i][j];int ans = 0;for(int i=0; i<n; ++i)for(int j=0; j<m; ++j)if(graph[i][j]==1)ans += max(0, dfs(graph, i, j));cout << ans << endl;return 0;
}
广度优先搜索代码如下:
# include<iostream>
# include<vector>
#include<queue>using namespace std;vector<vector<int>> dirs({{0, 1}, {0, -1}, {1, 0}, {-1, 0}});
int bfs(vector<vector<int>> &graph, int ii, int jj){queue<pair<int, int>> q;q.push({ii, jj});graph[ii][jj] = 2;int res = 0;while(!q.empty()){auto cur = q.front(); q.pop();++res;if(cur.first==0 || cur.second==0 || cur.first==graph.size()-1 || cur.second==graph[0].size()-1)res -= 10000;for(auto xy : dirs){int i = cur.first + xy[0], j = cur.second + xy[1];if(i<0 || i>=graph.size() || j<0 || j>=graph[0].size() || graph[i][j]!=1)continue;graph[i][j] = 2;q.push({i, j});}}return res;
}int main(){int n, m;cin >> n >> m;vector<vector<int>> graph(n, vector<int>(m));for(int i=0; i<n; ++i)for(int j=0; j<m; ++j)cin >> graph[i][j];int ans = 0;for(int i=0; i<n; ++i)for(int j=0; j<m; ++j)if(graph[i][j]==1)ans += max(0, bfs(graph, i, j));cout << ans << endl;return 0;
}
相关文章:
【Day44 LeetCode】图论问题 Ⅱ
一、图论问题 Ⅱ 1、岛屿的最大面积 这题和上一篇博客求岛屿数量如出一辙,都是要找出所有岛屿,深度优先搜索代码如下: # include<iostream> # include<vector>using namespace std;int dfs(vector<vector<int>> …...
技术总结 | MySQL面试知识点
存储引擎 Mysql 中的存储引擎 查询存储引擎的命令 show engines; Archive 只支持 insert 与select操作, 不支持索引 不支持事务 适用于存储需要长期保存,但是很少访问的数据,例如 历史日志 BlackHole 不存储数据,但是会记录写入操作 适用于性能测试 语言验证等情况 MyISAM…...
frameworks 之 Activity添加View
frameworks 之 Activity添加View 1 LaunchActivityItem1.1 Activity 创建1.2 PhoneWindow 创建1.3 DecorView 创建 2 ResumeActivityItem 讲解 Activity加载View的时机和流程 涉及到的类如下 frameworks/base/core/java/android/app/Activity.javaframeworks/base/services/cor…...
Linux下Ollama下载安装速度过慢的解决方法
问题描述:在Linux下使用默认安装指令安装Ollama,下载安装速度过慢,进度条进度缓慢,一直处于Downloading Linux amd64 bundle中,具体如下图所示: 其中,默认的Ollama Linux端安装指令如下…...
【小白学HTML5】一文讲清常用单位(px、em、rem、%、vw、vh)
html5中,常用的单位有px、em、rem、%、vw、vh(不常用)、cm、m等,这里主要讲解px、em、rem、%、vw。 学习了解:主流浏览器默认的字号:font-size:16px,无论用什么单位,浏览器最终计算…...
用自定义注解实现Excel数据导入中的枚举值校验
使用自定义注解实现Excel数据导入中的枚举值校验 在实际开发中,我们经常需要从Excel文件中导入数据,并且这些数据需要符合一定的规则,比如某些字段的值必须是预定义的枚举值。本文将介绍如何使用自定义注解来实现这一功能,以提高…...
关于redis的主从复制(下)
目录 全量复制 关于replid和runid 部分复制 补充问题 实时复制 psync可以从主节点获取全量数据,也可以获取一部分数据。主要就是看offset的进度,如果offset写作-1,就是获取全量数据。offset写具体的正整数,则是从当前偏移量位…...
uniapp uni.request重复请求处理
类似这种切换tab时,如果操作很快并且网络不太好,就出现数据错乱,在网上查了一圈,有一个使用uview拦截处理的,但是原生uni.requse没有找到详细的解决办法,就查到使用 abort 方法,我自己封装了一个…...
【大模型】DeepSeek:AI浪潮中的破局者
【大模型】DeepSeek:AI浪潮中的破局者 引言:AI 新时代的弄潮儿DeepSeek:横空出世展锋芒(一)诞生背景与发展历程(二)全球影响力初显 探秘 DeepSeek 的技术内核(一)独特的模…...
SOME/IP--协议英文原文讲解8
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2 Speci…...
用PyInstaller构建动态脚本执行器:嵌入式Python解释器与模块打包 - 简明教程
技术场景: 需分发的Python工具要求终端用户可动态修改执行逻辑将Python环境与指定库(如NumPy/Pandas)嵌入可执行文件实现"一次打包,动态扩展"的轻量化解决方案。 ▌ 架构设计原理 1. 双模运行时识别 # 核心判断逻辑…...
在做题中学习(89):螺旋矩阵
解法:模拟 思路:创建ret数组,用变量标记原矩阵的行数和列数,遍历一个元素就push_back进ret数组,每次遍历完一行或一列,相应行/列数--,进行顺时针螺旋遍历到为0即可。 细节:要有边界…...
从零搭建微服务项目Base(第5章——SpringBoot项目LogBack日志配置+Feign使用)
前言: 本章主要在原有项目上添加了日志配置,对SpringBoot默认的logback的配置进行了自定义修改,并详细阐述了xml文件配置要点(只对日志配置感兴趣的小伙伴可选择直接跳到第三节),并使用Feign代替原有RestT…...
数据结构《图》
数据结构《图论》 图的性质 一、无向图(Undirected Graph) 定义 由一组顶点(Vertex)和一组无向边(Edge)构成。 每条无向边用一条无方向的线段连接两个顶点,记为 ( (u, v) ),其中…...
【数据分析】通过个体和遗址层面的遗传相关性网络分析
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理应用场景加载R包数据下载函数个体层面的遗传相关性网络分析导入数据数据预处理构建遗传相关性的个体网络对个体网络Nij进行可视化评估和选择最佳模型评估和选择最佳模型最佳模型…...
在 macOS 的 ARM 架构上按住 Command (⌘) + Shift + .(点)。这将暂时显示隐藏文件和文件夹。
在 macOS 的 ARM 架构(如 M1/M2 系列的 Mac)上,设置 Finder(访达)来显示隐藏文件夹的步骤如下: 使用快捷键临时显示隐藏文件: 在Finder中按住 Command (⌘) Shift .(点ÿ…...
【产品经理】需求分析方法论+实践
阐述了需求分析的基本认知,包括需求分析的定义、原则和内容。接着,文章详细介绍了需求分析的十个步骤,从收集需求到结果评审,为产品经理提供了清晰的操作指南。 作为产品经理,需求分析是一个最基本的工作,但…...
Windows平台的小工具,功能实用!
今天给大家分享一款超实用的Windows平台监控工具,堪称“桌面小管家”,能帮你轻松掌握电脑的各种运行状态,比如网速、下载速度、内存和CPU占用率等常用参数,让你的电脑运行情况一目了然。 TrafficMonitor 网速监控悬浮窗软件 这款…...
意图识别概述
在当今的人工智能领域,意图识别技术是自然语言处理(NLP)中的一个重要分支,它使得机器能够理解人类语言背后的目的或意图。对于鸿蒙操作系统而言,掌握意图识别技术可以极大地提升用户体验,使设备能更好地响应…...
54. c++类型转换
c是强类型语言,它有自己的类型系统,隐式类型转换是在类型转换时,自动转换且数据不丢失,显示类型转换是指定转换类型;在c风格的类型转换中 ,如下代码进行转换 #include <iostream>int main(int argc,…...
SAP-工单技术性关闭操作手册
文章目录 单个工单批量处理TECO和CLSD标识的区别 单个工单 事务代码CO02,输入工单号后回车 功能-》限制处理-》技术性完成 工单状态更改 撤销TECO操作 CO02输入工单号,功能-》限制处理-》撤销技术性完成 批量处理 事务代码COHV,点击生…...
Aseprite绘画流程案例(1)——画相机图标
原图: 步骤一:打开需要参照的图标 步骤二:将参照的图片拖放到右边,作为参考 步骤三:新建24x24的画布,背景为白色的画布 步骤四:点击菜单栏——视图——显示——像素网格(如果画布已经…...
RESTful 的特点与普通 Web API 的区别
RESTful 是一种设计风格,而不仅仅是普通的 Web API。它遵循一些特定的原则和约束,使得 API 更加简洁、可扩展和易于理解。以下是 RESTful 的特点,以及与普通 Web API 的区别: RESTful 的特点 1. 资源导向 RESTful API 的核心是资…...
安装海康威视相机SDK后,catkin_make其他项目时,出现“libusb_set_option”错误的解决方法
硬件:雷神MIX G139H047LD 工控机 系统:ubuntu20.04 之前运行某项目时,处于正常状态。后来由于要使用海康威视工业相机(型号:MV-CA013-21UC),便下载了并安装了该相机的SDK,之后运行…...
云计算架构学习之Ansible-playbook实战、Ansible-流程控制、Ansible-字典循环-roles角色
一、Ansible-playbook实战 1.Ansible-playbook安装软件 bash #编写yml [rootansible ansible]# cat wget.yml - hosts: backup tasks: - name: Install wget yum: name: wget state: present #检查playbook的语法 [rootansible ansible]…...
常用安全哈希算法bcrypt
文章目录 常用安全哈希算法bcrypt背景什么是哈希算法bcrypt哈希值验证在线工具编程方式 Bcrypt的原理 常用安全哈希算法bcrypt 背景 在设计一个系统的时候,肯定都有会有用户身份认证的问题,一般对用户校验的时候,都是对用户存在数据库总的密…...
Docker 常用命令基础详解(一)
一、Docker 初相识 在当今数字化时代,软件开发和部署的效率与灵活性成为了关键因素。Docker,作为一款开源的应用容器引擎,犹如一颗璀璨的明星,照亮了软件开发与部署的道路,为开发者们带来了前所未有的便利。它就像是一…...
网络工程师 (47)QOS
一、概念与原理 QOS即服务质量(Quality of Service)是一种网络技术,用于管理和保证网络中不同类型的质量和性能。它通过设置优先级和带宽限制等策略,确保关键应用(如视频会议、语音通信)的数据包能够在网络…...
glob 用法技巧
目录 处理大量文件节省内存 匹配多个文件扩展名 遍历多种格式文件 遍历某一个文件: 查找当前目录和子目录 6. 排除特定文件 7. 大小写不敏感匹配 8. 获取绝对路径 9. 处理特殊字符 处理大量文件节省内存 技巧:用 iglob 替代 glob,逐…...
Vue3 前端路由配置 + .NET8 后端静态文件服务优化策略
目录 一、Vue 前端配置(核心) 1. 配置 Vue Router 的 base 路径 2. 配置 Vue 的 publicPath 二、.NET 后端配置(关键) 1. 启用默认文档中间件 2. 配置静态文件服务的默认文档 三、验证访问路径 四、原理解释 五、常见问题…...
