算法之图论

news2024/11/28 22:43:10

定义

图通常以一个二元组 G=<V, E>表示,V表示节点集,E表示边集。节点集中元素的个数,称为图的阶。

若图G中的每条边都是没有方向的,称为无向图;每条边是由两个节点组成的无序对,例如节点V1和节点V2之间的边,记为(V1, V2)
![无向图](https://img-blog.csdnimg.cn/7a120abfeaac447681c3d703b3251f06.jpeg#pic_center无向图
若图G中的每条边都是有方向的,称为有向图;有向边也称为弧,每条弧是有两个节点组成的有序对,例如节点V1和节点V2之间的弧,记为<V1, V2>
有向图

定理

握手定理:所有节点的度数之和等于边数的两倍。

存储

邻接表是图的一种链式存储结构,包括两部分:节点和邻接点。
邻接点结构

struct LinkNode {
    int nodeIndex; // 节点下标
    // int weight; // 路径上有不同权重,可以使用
    LinkNode *next; // 下一个邻接点
};

节点

struct Node {
    char ch; // 节点名称,假定为单字符
    LinkNode *first; // 第一个邻接点
}

节点数组

Node nodes[26]; // 26个字符

示例:
有如下图:
示例图
邻接表结构:
邻接表

图的搜索

广度优先搜索

广度优先搜索(Breadth First Search, BFS),又称为宽度优先搜索。即从某个节点(源点)出发,优先访问该节点的所有未被访问的邻接点,再依次从这些被访问的点出发,一层一层的访问,直到访问节点均已访问。如存储的示例图,访问顺序如下
广度优先搜索

深度优先搜索

深度优先搜索(Depth First Search, DFS)。即优先沿着一条路径搜索,直到当前节点无未被访问的邻接点,则退回到上一个节点,继续访问其未被访问的邻接点,直到所有点均已访问。如存储的示例图,访问顺序如下
深度优先搜索

图的连通性

  1. 无向图的连通分量
    在无向图中,如果从节点Vi到节点Vj有路径,则称节点Vi和节点Vj是连通的。如果途中任意两个节点都是连通的,则称图G为连通图。连通分量,即其子连通图。如下图,为连通图
    连通图
  2. 有向图的强连通分量
    在有向图中,如果图中的任意两个节点从Vi到Vj都有路径,且从Vj到Vi也有路径,则称图G为强连通图。强连通分量,即其子强连通图。如下图,为强连通图
    强连通图1 强连通图2
  3. 桥和割点
    如果去掉无向图G中的一条边Ei后,图G分裂为两个不相连的子图,那么Ei为图G的桥,或称割边;如果去掉无向图G中的一个节点Vi,及与Vi关联的所有边后,图G分裂为两个或两个以上不相连的子图,那么Vi称为图G的割点。
    存储的示例图,去掉d到e的边,则原图分裂为两个不连通的子图,因此,d到e的边,为图的
    桥
    存储的示例图,去掉节点d,及与d相连的边,则原图分裂为两个不连通的子图,因此,节点d为图的割点
    割点
    桥与割点的关系:有割点不一定有桥,有乔一定有割点;桥一定是割点依附的边
    桥与割点的算法:Tarjan算法
  4. 无向图的双连通分量(DCC)
    如果无向图中不存在桥,则称为边双连通图。图中任意两点之间都存在两条或两条以上的路径,且路径上的边互不重复。极大边双连通图,称为边双连通分量(e-DCC)。
    如果无向图中不存在割点,则称为点双连通图。图中,如果节点数大于2,则在任意两点间都存在两条或两条以上路径,且路径上的点互不重复。极大点双连通子图称为点双连通分量(v-DCC)。
  5. 双连通分量的缩点
    把每一个边双连通分量都看作一个点,把桥看作连接连个缩点的无向边,可得到一棵树,这种方法被称为边连通分量缩点。如图,虚线内看作一个节点
    边连通分量缩点
    把每一个点双连通分量都看作一个点,把割点看作一个点,每个割点都向包含它的点双连通分量连接一条边,得到一棵树,这种方法称为点双连通分量缩点。如图,虚线内看作一个节点
    点双连通分量缩点

参考《算法训练营》

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

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

相关文章

3、C# 方法构成

上一节,我们讲述了程序的基本构成。由大到小分别为”解决方案-->项目-->类-->方法“。 这一节,我们讲讲方法。 方法可以说是程序的基本构成单位。假如把方法抽象成点的话,我们可以认为程序是一个树状的结构。树根,就是我们的起点方法,也叫主方法。这一点,基本…

用户登录案例练习(flask+微信小程序)

目录 flask 微信小程序 flask 1.项目后端步骤 具体步骤可参考flask官网&#xff1a;flask 中文网 &#xff08;1&#xff09;创建虚拟环境 &#xff08;2&#xff09;激活虚拟环境 &#xff08;3&#xff09;在虚拟环境里边安装Flask &#xff08;4&#xff09; 粘贴官…

达闼面试(部分)(未完全解析)

grpc怎么解决负载均衡问题? Answer by newBing : gRPC提供了多种负载均衡策略&#xff0c;包括轮询、随机、最少连接数等。gRPC客户端可以使用这些策略来选择要连接的服务器。 k8s环境下部署grpc的几种方案 : 在k8s环境中&#xff0c;可以选择headless service&#xff0c;或者…

Leetcode 动态规划详解

动态规划&#xff08;Dynamic Programming, DP&#xff09;是一种解决多阶段决策过程最优化问题的数学方法。动态规划的特点是将原问题分解成多个子问题进行求解&#xff0c;每个子问题只求解一次&#xff0c;并将其结果保存下来&#xff0c;避免重复计算。然后通过组合子问题的…

初识Mybatis,并创建第一个Mybatis项目(详细图文教程)

目录 前言 一、Mybatis是什么&#xff1f; 二、Mybatis的优点 三、创建第一个Mybatis项目 配置Mybatis开发环境 创建数据库 添加框架 配置连接字符串和Mybatis 使用Mybatis操作数据库 测试 前言 Spring 集成了 Mybatis 框架&#xff0c;方便我们更加便捷的使用&#…

机器学习算法基础-覃秉丰 笔记版

文章目录 笔记回归sklearn-LASSOsklearn-一元线性回归sklearn-多元线性回归sklearn-岭回归sklearn-弹性网ElasticNetsklearn-逻辑回归sklearn-非线性逻辑回归标准方程法-岭回归梯度下降法-一元线性回归梯度下降法-多元线性回归梯度下降法-逻辑回归梯度下降法-非线性逻辑回归线性…

在kaggle中用GPU训练模型

文章目录 导入文件数据对于文件目录的访问对于文件的下载对GPU的使用 导入文件数据 参考文章&#xff1a; 使用kaggle GPU跑自己的模型 创建你自己的文件数据 对于数据文件创建notebook进行处理 对于文件目录的访问 ①传入的数据文件放在&#xff1a;/kaggle/input/ 文件…

Form Generator 扩展子表单组件之表单校验(超详细)

一、form-generator是什么?✨ ⭐️ 🌟 form-generator的作者是这样介绍的:Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 但目前它提供的组件并不能满足我们在项目中的…

zabbix通过JMX监控tomcat运行情况

第三阶段基础 时 间&#xff1a;2023年7月20日 参加人&#xff1a;全班人员 内 容&#xff1a; zabbix通过JMX监控tomcat 目录 zabbix通过JMX监控tomcat 一、配置java网关 二、修改zabbix服务端配置文件 三、安装tomcat 四、Zabbix-web端配置 zabbix通过JMX监控tomc…

1.react useState使用与常见问题

文章目录 0. 取消批处理合并更新, render 2次1. 合并更新,setCount(异步更新) 3次相当于1次, count值为12. 如何取消批处理合并,让值累加?,改为回调函数写法,内部会依次执行函数, 执行3次 count值为33. 异步更新,获取异步更新的值?useEffect4.利用扩展运算符的形式来解决对象…

基于sklearn计算precision、recall等分类指标

文章目录 一、分类指标函数1.1 precision_score函数1.2 recall_score函数1.3 accuracy_score函数1.4 f1_score函数1.5 precision_recall_curve函数1.6 roc_curve函数1.7 roc_auc_score函数1.8 classification_report函数 二、二分类任务三、多分类任务3.1 Macro Average&#x…

什么是SQL和NoSQL?

目录 认识NoSQL 关系型数据库 非关系型数据库 关系型数据库与非关系型数据库之间的对比 认识NoSQL SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系型数据库的语言。关系型数据库以表格的形式存储数据&#xff0c;表格由行和列组成。SQL语言提供了…

Spring MVC -- 获取参数(普通对象+JSON对象+URL地址参数+文件+Cookie/Session/Header)

目录 1.获取参数 1.1获取单个参数 1.2获取多个参数 传参注意事项&#xff1a; 2.获取对象 3.后端参数重命名RequestParam 4.获取JSON对象RequestBody 5.从 URL 地址中获取参数 PathVariable 6.上传文件 RequestPart 7.获取Cookie/Session/Header 7.1 获取 Request 和…

uniapp开发app获取当前位置的经纬度

查阅了大量的帖子&#xff0c;发现基本上都不能用&#xff0c;后来发现需要配置一下manifest.json才可以&#xff0c;话不多说上代码 真机运行打印出来的经纬度&#xff1a; 一、配置文件 检查一下manifest.json有没有下面的代码&#xff0c;没有的话就加上 { "permiss…

力扣算法 704 35 34 69 367二分查找

704.二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 二分查找法 class Solution { public:int search(vecto…

Centos安装GitLab教程

相关网站 官网安装文档可以按照官方文档去安装&#xff0c;但安装过程中可能会出错。所以最好按照本文章的流程去安装&#xff0c;我是边安装边写的文章。 准备工作 在vmware上安装centos&#xff0c;这里要注意下&#xff0c;gitlab比较占用内存&#xff0c;因此要分配至少…

vue 3.0 下载本地pdf文件

使用a标签,把pdf文件放到public文件夹下面 <el-form label-width"160px"> <el-form-item label"使用手册"> <div class"form-item-static"> <a href"/使用手册.pdf" target"_blank" class"link&q…

轻量级Firefox Send替代方案Gokapi

想不到一个域名的变动会影响这么大&#xff0c;访问量出现断崖式下跌。由此可见&#xff0c;平时的访问应该只是一些 RSS 的访问而已。 上面是 Pageviews&#xff0c;下面是 Uniques 今天略有回升 难怪那些大公司要花钱买域名了&#xff0c;不过老苏是个佛系的人&#xff0c;一…

【pom.xml文件】maven中scope标签和optional标签

文章目录 前言一. scope的类型总览二. 详解1.compile&#xff08;默认选项&#xff09;2. test3. runtime4.privided5. system6. import 三.optional 前言 一. scope的类型总览 设置依赖范围 可以对引入的资源进行设置&#xff0c;设置其生效的范围。生效范围主要有以下&#…

mac如何提取视频中的音频?

mac如何提取视频中的音频&#xff1f;我们经常在平时工作的时候&#xff0c;需要将一个视频里面的音频单独提取出来另做他用&#xff0c;例如很多视频自媒体博主就经常使用这种方法来储备音频素材&#xff0c;这个操作在Windows上面比较容易实现&#xff0c;毕竟有相当多的软件…