当前位置: 首页 > news >正文

算法基础--------【图论】

图论(待完善)

DFS:和回溯差不多
BFS:进while进行层序遍历

定义: 图论(Graph Theory)是研究图及其相关问题的数学理论。图由节点(顶点)和连接这些节点的边组成。图论的研究范围广泛,涉及路径、流、匹配、着色等诸多问题。

特点:
节点和边: 图论问题通常围绕节点(点)和边(线)展开,研究它们之间的关系。
图的种类: 包括无向图、有向图、加权图等不同类型的图,每种图有不同的应用场景。
算法: 常见的图论算法包括深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(如Dijkstra算法、Floyd-Warshall算法)、最小生成树算法(如Kruskal算法、Prim算法)等。(Dijkstra华子暑期实习笔试考了)
适用范围: 广泛用于网络分析、路径规划、资源分配等领域,如社交网络、交通系统、计算机网络等。(网络分析,路径规划这个真的很爱考)
示例: 最短路径问题(如寻找城市之间的最短路线)是一个经典的图论问题,通常用Dijkstra算法或Bellman-Ford算法解决。

【200】岛屿数量

要么用DFS的思想,要么用BFS层序遍历的思想
DFS:节点有四个方向,都遍历一遍,我写的逻辑是先下右上左。
dfs方法: 设目前指针指向一个岛屿中的某一点 (i, j),寻找包括此点的岛屿边界。
从 (i, j) 向此点的上下左右 (i+1,j),(i-1,j),(i,j+1),(i,j-1) 做深度搜索。
终止条件:
(i, j) 越过矩阵边界;
grid[i][j] == 0,代表此分支已越过岛屿边界。
搜索岛屿的同时,执行 grid[i][j] = ‘0’,即将岛屿所有节点删除,以免之后重复搜索相同岛屿。
主循环:
遍历整个矩阵,当遇到 grid[i][j] == ‘1’ 时,从此点开始做深度优先搜索 dfs,岛屿数 count + 1 且在深度优先搜索中删除此岛屿。
最终返回岛屿数 count 即可。

DFS:

class Solution {
public:int numIslands(vector<vector<char>>& grid) {if(grid.size() == 0 || grid[0].size() == 0)return 0;int m = grid.size(),n = grid[0].size();vector<vector<int>> vec;int res =0;for(int i =0;i<m;i++){vector<int> tempvec;for(int j=0;j<n;j++){   int tmp = grid[i][j]-'0';tempvec.push_back(tmp);//转化成int类型的}vec.push_back(tempvec);} for(int i =0;i<m;i++){for(int j=0;j<n;j++){if( vec[i][j] == 1){dfs(vec,i,j);//dfs的次数就是岛屿的数量res++;}}} return res;}   
private:void dfs(vector<vector<int>>& vec,int i, int j){if(i<0 || j<0 || i>vec.size()-1 || j>vec[0].size()-1)return;cout<<"(i,j) = "<<i<<j<<","<<vec[i][j]<<endl;if(vec[i][j] != 1)return;vec[i][j] =-1;//标记dfs(vec,i+1,j);dfs(vec,i,j+1);dfs(vec,i-1,j);dfs(vec,i,j-1);}
};
int main() {Solution s;vector<vector<char>> grid = {{'1','1','1','1','0'},{'1','1','0','1','0'},{'1','1','0','0','0'},{'0','0','0','0','0'}};s.numIslands(grid);system("pause");return 0;
}

BFS:
借用一个队列 queue,判断队列首部节点 (i, j) 是否未越界且为 1:
若是则置零(删除岛屿节点),并将此节点上下左右节点 (i+1,j),(i-1,j),(i,j+1),(i,j-1) 加入队列;
若不是则跳过此节点;
循环 pop 队列首节点,直到整个队列为空,此时已经遍历完此岛屿。

class Solution {
public:int numIslands(vector<vector<char>>& grid) {if (grid.empty() || grid[0].empty()) return 0;int m = grid.size(), n = grid[0].size();int res = 0;queue<pair<int, int>> q;for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {if (grid[i][j] == '1') {q.push({i,j});grid[i][j] = '0'; // 标记为已访问 加入就标记res++;//第一层更新while (!q.empty()) {//BFS遍历int x = q.front().first, y = q.front().second;q.pop();for (const auto& dir : dirs) {int nx = x + dir.first, ny = y + dir.second;if (nx >= 0 && nx < m && ny >= 0 && ny < n && grid[nx][ny] == '1') {q.push({nx,ny});grid[nx][ny] = '0'; // 标记为已访问}}}}}}return res;}
private:vector<pair<int, int>> dirs{{-1, 0}, {1, 0}, {0, -1}, {0, 1}};};

【994】腐烂的橘子

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:

  • 0 代表空单元格;
  • 1 代表新鲜橘子;
  • 2 代表腐烂的橘子。

每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。

返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1

示例 1:

img

输入:grid = [[2,1,1],[1,1,0],[0,1,1]]
输出:4
class Solution {
public:int orangesRotting(vector<vector<int>>& grid) {if(grid.size() == 0 ||grid[0].size() ==0)return -1;int m = grid.size();int n = grid[0].size();int min = 0;//分钟数int fresh = 0;//新鲜橘子queue<pair<int,int>> q;//存储腐烂的橘子for(int i =0;i<m;i++){for(int j =0;j<n;j++){if(grid[i][j] == 2){q.push({i,j});}else if(grid[i][j] == 1){//统计新鲜橘子fresh++;}}}// if(q.empty() || fresh==0 )return -1;//没有腐烂的橘子 没有新鲜的橘子vector<pair<int,int>> dirs = {{1,0},{0,1},{0,-1},{-1,0}};while(!q.empty()){//每一层int qsize = q.size();//有n个烂橘子bool flag = false;for(int i =0;i<qsize;i++){//遍历这n个烂橘子int x = q.front().first;int y = q.front().second;q.pop();for(auto dir:dirs){int nx = dir.first+x;int ny = dir.second+y;if(nx >=0 && nx<m && ny >=0 && ny<n && grid[nx][ny]==1){q.push({nx,ny});grid[nx][ny] = 2;fresh--;//到最后要没有新鲜橘子才结束flag = 1;//有新鲜橘子就标记}}}//一层就要++if(flag)min++;//有新鲜橘子才++}return fresh? -1:min;}
};

总结:腐烂的橘子是以各个腐烂的橘子为头结点开始入队遍历的,而岛屿数量是以有无1直接入队遍历。

相关文章:

算法基础--------【图论】

图论&#xff08;待完善&#xff09; DFS:和回溯差不多 BFS:进while进行层序遍历 定义: 图论&#xff08;Graph Theory&#xff09;是研究图及其相关问题的数学理论。图由节点&#xff08;顶点&#xff09;和连接这些节点的边组成。图论的研究范围广泛&#xff0c;涉及路径、…...

x86和x64架构的区别及应用

x86和x64架构的区别及应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在计算机硬件和软件领域&#xff0c;x86和x64是两种常见的处理器架构。它们在计算能…...

2024年度总结:不可错过的隧道IP网站评估推荐

随着网络技术的飞速发展&#xff0c;隧道IP服务成为了许多企业和个人在进行网络活动时的得力助手。作为专业的测评团队&#xff0c;我们经过一整年的深入研究和测试&#xff0c;为大家带来了三款备受瞩目的隧道IP网站推荐——品易HTTP、极光HTTP和一G代理。接下来&#xff0c;我…...

Linux下VSCode的安装和基本使用

应用场景&#xff1a;嵌入式开发。 基本只需要良好的编辑环境&#xff0c;能支持文件搜索和跳转&#xff0c;就挺OK的。 之所以要在Linux下安装&#xff0c;是因为在WIN11上安装后&#xff0c;搜索功能基本废了&#xff0c;咋弄都弄不好&#xff0c;又不方便重装win系统&#x…...

C# 实现websocket双向通信

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C# &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff…...

Spring Boot结合FFmpeg实现视频会议系统视频流处理与优化

在构建高效稳定的视频会议系统时,实时视频流的处理和优化是开发者面临的核心挑战之一。这不仅仅是简单的视频数据传输,更涉及到一系列复杂的技术问题,需要我们深入分析和有效解决。 高并发与实时性要求: 视频会议系统通常需要支持多人同时进行视频通话,这就意味着系统需要…...

扫扫地,搞搞卫生 ≠ 车间5S管理

在制造业的日常运营中&#xff0c;车间管理是一项至关重要的工作&#xff0c;它直接关系到生产效率、产品质量以及员工的工作环境。然而&#xff0c;许多人常常将简单的“扫扫地&#xff0c;搞搞卫生”等同于车间5S管理&#xff0c;这种误解不仅可能导致管理效果不佳&#xff0…...

ES(笔记)

es就是json请求体代替字符串查询 dsl查询和过滤&#xff0c;一个模糊查询&#xff0c;一个非模糊查询 must&#xff0c;should 做模糊查询的&#xff0c;里面都是match&#xff0c;根据查询内容进行匹配&#xff0c;filter过滤&#xff0c;term词元查询&#xff0c;就是等值查…...

开箱即用的fastposter海报生成器

什么是 fastposter ? fastposter 海报生成器是一款快速开发海报的工具。只需上传一张背景图&#xff0c;在对应的位置放上组件&#xff08;文字、图片、二维码、头像&#xff09;即可生成海报。 点击代码直接生成各种语言 SDK 的调用代码&#xff0c;方便快速开发。 软件特性&…...

力扣每日一题 6/28 动态规划/数组

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2742.给墙壁刷油漆【困难】 题目&#xff1a; 给你两个长度为 n 下标从 0…...

[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式8275张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8275 标注数量(xml文件个数)&#xff1a;8275 标注数量(txt文件个数)&#xff1a;8275 标注…...

若依 ruoyi 分离版 vue 简单的行内编辑实现

需要实现的效果&#xff1a;双击文本 - 修改文本 - 保存修改。 原码&#xff1a;仅文本显示文字内容 <el-table-column label"商品" align"center" prop"goodsName" width"200" v-if"columns[1].visible" /> 实现…...

【工具】API文档生成DocFX

文章目录 总述示例第一步&#xff1a;安装 DocFX第二步&#xff1a;初始化项目第三步&#xff1a;编辑配置文件第四步&#xff1a;编写文档第五步&#xff1a;生成文档第六步&#xff1a;预览文档第七步&#xff1a;部署文档 总述 DocFX 是一个由微软开发的开源文档生成工具&a…...

在 JavaScript 中处理异步操作和临时事件处理程序

关键技术和设计总结 使用 Promise 和 then 进行异步操作: 我们通过使用 Promise 来处理异步操作&#xff0c;确保操作按顺序执行。在 getReportListByCurrentTime 函数中&#xff0c;返回一个 Promise 对象&#xff0c;保证在数据加载完成后调用 resolve&#xff0c;以便可以在…...

[Cocos Creator] v3.8开发知识点记录(持续更新)

问题&#xff1a;从 cc 里找不到宏定义 CC_PREVIEW 等。 解决方案&#xff1a;找不到就自己定义&#xff0c;将 declare const CC_PREVIEW; 添加到需要的ts文件里。参考&#xff1a;creator3d 找不到宏定义如 CC_EDITOR&#xff0c;CC_PREVIEW&#xff0c;CC_JSB - Creator 3.x…...

Excel_VBA编程

在Excel中&#xff0c;VBA&#xff08;Visual Basic for Applications&#xff09;是一种强大的工具&#xff0c;可以用来自动化各种任务。下面介绍一些常用的VBA函数和程序结构&#xff1a; 常用函数 MsgBox&#xff1a;用于显示消息框。 MsgBox "Hello, World!"In…...

Java中的Path类使用详解及最佳实践

Java中的Path类使用详解及最佳实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中的Path类&#xff0c;这是Java标准库中用于操作文件…...

生成和查看预定义宏

参考下面的指令 arm-none-eabi-gcc -marcharmv7e-m -dM -E - < /dev/null | grep SYNC这个指令是用来生成和查看预定义宏&#xff08;macros&#xff09;的一种方法。让我们逐步分解和解释这个命令的各个部分&#xff1a; arm-none-eabi-gcc: 这是 ARM 架构下的交叉编译器…...

Redis 7.x 系列【12】数据类型之基数统计(HyperLogLog)

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 PFADD2.2 PFCOUNT2.3 PFMERGE 3. 应用场景 1. 概述 基数表示数…...

开源大模型RAG企业本地知识库问答机器人-ChatWiki

ChatWiki ChatWiki是一款开源的知识库 AI 问答系统。系统基于大语言模型&#xff08;LLM &#xff09;和检索增强生成&#xff08;RAG&#xff09;技术构建&#xff0c;提供开箱即用的数据处理、模型调用等能力&#xff0c;可以帮助企业快速搭建自己的知识库 AI 问答系统。 开…...

基于Java的蛋糕预定系统【附源码+LW】

摘 要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统购物方式采取了人工的管理方法&#xff0c;但这种管理方法存…...

Java框架的原理主要基于以下几个核心

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…...

已解决javax.xml.bind.MarshalException:在RMI中,参数或返回值无法被编组的正确解决方法,亲测有效!!!

已解决javax.xml.bind.MarshalException&#xff1a;在RMI中&#xff0c;参数或返回值无法被编组的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 服务器端代码 客户端代码 报错原因 解决思路 解决方法 1. 实现…...

仓库管理系统17--客户管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、添加用户控件 <UserControl x:Class"West.StoreMgr.View.CustomerView"xmlns"http://schemas.microsof…...

笔记本重装系统怎么操作? windows电脑重装系统,超实用的四种方法

重新安装操作系统是维护计算机性能和确保系统稳定运行的重要步骤。对于 Windows 笔记本用户而言&#xff0c;熟悉重装系统的方法可以帮助他们解决各种问题&#xff0c;从提高系统速度到修复软件故障。然而具体来讲&#xff0c;笔记本重装系统怎么操作呢&#xff1f;接下来&…...

【高考志愿】计算机

目录 一、专业概述 二、就业方向 三、选择建议 四、注意事项 五、计算机专业学科排名 高考志愿选择计算机专业&#xff0c;无疑是一个充满挑战与机遇的决策。这个专业以其广泛的应用领域、前沿的技术研究和可观的就业前景&#xff0c;吸引了无数考生的目光。 一、专业概述…...

使用ExpandableListView创建可扩展列表

使用ExpandableListView创建可扩展列表 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨如何使用Android中的ExpandableListView创建可扩展列…...

酒店新零售模式,亚朵酒店众筹模式, 社交新零售商业模式

抓住会员的需求&#xff0c;通过众筹让上万铁杆粉丝成为微股东&#xff01; 作为一家高端酒店&#xff0c;它拥有近2000万会员&#xff0c;这些会员还抢着掏钱帮它开酒店。而且&#xff0c;这家酒店还直接融资了19亿&#xff0c;计划上市。这家酒店在全国开设了1000多家店&…...

2010-2023年 省级、地级市、地市州盟保障性住房面积数据

保障性住房是政府为解决中低收入家庭住房问题而实施的一项重要政策&#xff0c;旨在通过提供限定价格或租金的住房&#xff0c;实现社会公平和稳定。以下是对省级、地级市、地市州盟保障性住房面积数据的介绍&#xff1a; 数据简介 定义&#xff1a;保障性住房包括廉租住房、…...

Java 语言特定指南

Java 语言特定指南 本 Java 入门指南将教您如何使用 Docker 创建一个容器化的 Spring Boot 应用程序。在本模块中&#xff0c;您将学习如何&#xff1a; 使用 Maven 容器化并运行一个 Spring Boot 应用程序设置本地开发环境以将数据库连接到容器、配置调试器&#xff0c;并使…...

重庆市建设工程信息网招标文件/网站seo基础优化

欢迎和号主【前端点线面】进群盘算法&#xff0c;此外本号干货满满&#xff1a;14个门类&#xff08;100篇原创&#xff09;内容&#xff08;又干又硬&#xff09;、《前端百题斩》pdf&#xff08;助力薪资double&#xff09;、20篇思维导图&#xff08;知识系统化、记忆简单化…...

济宁有没有专门做网站的/营销型网站模板

今天终于将交叉编译环境搭建完成,第一次用linux的一些命令,还真不习惯,不过用多了也不错,Ubuntu8.04是在虚拟机下安装的,下面简单记录自己安装的过程,以便日后查阅.Step1:下载cross-3.2.tar.bz2,然后复制到/home文件下:sudo cp cross-3.2.tar.bz2 /home再解压到/usr/local文件夹…...

百度推广图片/福州360手机端seo

一&#xff1a;CvMat* cvInitMatHeader( CvMat* mat, int rows, int cols, int type,void* dataNULL, int stepCV_AUTOSTEP ); mat 指针指向要被初始化的矩阵头. rows 矩阵的行数. cols 矩阵的列数. type 矩阵元素类型. data 可选的&#xff0c;将指向数据指针分配给矩阵头. …...

模板做网站多少钱/巨量算数数据分析

十年之前的1月20日&#xff0c;Michel Schinz宣布了Scala编程语言的第一个实现。在宣布之时&#xff0c;Scala被描述为“一种平滑地集成了面向对象编程和函数式编程的语言”&#xff0c;而且“是为以简洁、优雅且类型安全的方式表达常见编程模式而设计的”。\u0026#xD;当时是这…...

百度网站官网怎么做/百度官方优化指南

闪屏呢&#xff0c;就是SplashScreen&#xff0c;也可以说是启动画面&#xff0c;就是启动的时候&#xff0c;闪&#xff08;展示&#xff09;一下&#xff0c;持续数秒后&#xff0c;自动关闭。 android的实现非常简单&#xff0c;使用Handler对象的postDelayed方法就可以实现…...

专门做甜点的视频网站/河南seo和网络推广

创建线程 MsgThread : TMsgThread.Create(False) ; //创建并执行线程 MsgThread : TMsgThread.Create(True) ; //创建线程后挂起 constructor Create(CreateSuspended: Boolean); 中的参数CreateSuspended表示创建后是否挂起线程。 2&#xff09;设置线程里没有设置循环执行的话…...