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

第八章--图

定义

类比前面所学的线性表和树,图就是多对多的关系。

再详细点的定义就是:图由顶点集合V(G)和边集合E(G)组成。顶点集合V(G)是一组元素的集合,这些元素称为顶点(或节点);边集合E(G)是由顶点对组成的集合,这些顶点对表示顶点之间的关系,称为边。

相关概念 

有向图:边有方向。

无向图:边无方向。

加权图:每条边都赋予一个权重(可以是表示距离、成本、时间等的数值)。

子图:设 G=(V,E) 是一个图,G'=(V',E'),如果V' \subseteq V且E' \subseteq E,则称 G' 是 G 的子图。

例如:

邻接:顶点间有边相连,称顶点间有邻接关系。

出度、入度与度:有向图中一个点的出度是指由该顶点射出的有向边的条数,入度就是射入该顶点的条数du;对于无向图,度就是邻接于该点的边的总数

简单图:一种特殊的无向图,1)图中没有自环,即不存在一条边的两个端点是同一个顶点;2)图中任意两个顶点之间最多只有一条边相连

多重图:允许存在平行边的图,即图中可以有多个边连接同一对顶点;允许多重图存在自环。

无向完全图:无向图中任意两个不同的顶点之间都存在一条无向边,边数为C_{n}^{2}=n(n-1)/2

有向完全图:边数为P_{n}^{2}=n(n-1)

路径:在图G=(V,E)中,从顶点 v_0 到顶点 v_n 的路径是一个顶点序列v_0, v_1, v_2, \cdots, v_n,使得对于 i = 0, 1, \cdots, n - 1(v_i, v_{i + 1}) 是图G中的边。如果图是有向图,那么路径中的边必须按照箭头所指的方向依次连接。路径可以分为简单路径和基本路径。简单路径是指路径中所有的边都不相同基本路径是指路径中所有的顶点都不相同(除了起点和终点可能相同)。

回路:一条特殊的路径,它的起点和终点是同一个顶点。回路也可分为简单回路和基本回路。简单回路是指回路中所有的边都不相同基本回路是指除了起点和终点相同外,其余顶点都不相同的回路。

图的存储方式

邻接矩阵表示法

直接看图:顶点用一维数组存储,矩阵上的索引代表顶点,矩阵里存储的信息代表边(1为二者有连线否则无关联)

主要是看行标。

加权邻接矩阵表示法

其实与邻接矩阵表示法没什么太大区别,不过是把矩阵里存储的信息改为权值,有权值则一定有边,无穷则代表无边。

邻接表

顶点依然用一维数组存储,边由同一个顶点出发的所有边组成的一条单链表。

逆邻接表

顶点保存该顶点的射入边形成的单链表的首节点地址。

图的遍历

访问邻接点:

1、DFS--栈(深度优先)

2、BFS--队列(广度优先)

连通图

无向图的连通性

连通图:在无向图中,如果从顶点u到顶点v存在路径,则称顶点u和v是连通的。如果图中任意两个顶点都是连通的,那么这个无向图就被称为连通图。

连通分量:非连通图可以分解为多个连通的子图,这些极大连通子图称为连通分量。

有向图的连通性

强连通图:在有向图中,如果对于任意两个顶点u和v,既存在从u到v的路径,又存在从v到u的路径,则称该有向图是强连通图(意思就是双向的)。

强连通分量:非强连通的有向图可以划分为多个极大强连通子图,这些子图称为强连通分量

弱连通图:如果忽略有向图中边的方向后得到的无向图是连通的,则称该有向图为弱连通图(意思就是单向的)。

图的连通性判定方法

1)对于无向图,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)算法从任意一个顶点出发,遍历图中的所有顶点。如果能够访问到图中的所有顶点,那么该图是连通图;否则,图是非连通图。

2)对于有向图,判定强连通性可以通过计算图的强连通分量来实现。常用的算法有 Kosaraju 算法Tarjan 算法等。这些算法通过对图进行深度优先搜索,利用顶点的访问顺序和回溯信息来识别强连通分量。


小结

  1. 图的定义:图由顶点集合 V(G) 和边集合 E(G) 组成,体现多对多关系,顶点集合是元素集合,边集合由顶点对组成表示顶点关系。
  2. 相关概念
    • 图的类型:有向图边有方向,无向图边无方向,加权图每条边有权重,子图满足顶点和边集合分别是原图的子集。
    • 顶点关系:顶点间有边相连为邻接;有向图顶点有出度(射出边条数)和入度(射入边条数),无向图顶点的度是邻接边总数。
    • 图的种类:简单图无自环且顶点间最多一条边;多重图允许平行边和自环;无向完全图任意两不同顶点有边相连;有向完全图任意两不同顶点有双向边。
    • 路径与回路:路径是顶点序列,有向图路径边按方向连接,分简单路径(边不同)和基本路径(顶点不同,起点终点可同);回路是起点终点相同的路径,分简单回路(边不同)和基本回路(除起点终点相同外顶点不同)。
  3. 图的存储方式
    • 邻接矩阵表示法:顶点用一维数组存储,矩阵索引代表顶点,矩阵存储边信息(1 表示有连线,0 表示无关联)。
    • 加权邻接矩阵表示法:与邻接矩阵类似,矩阵存储边的权值,无穷表示无边。
    • 邻接表:顶点用一维数组存储,边由同一顶点出发的边组成单链表。
    • 逆邻接表:顶点保存射入边形成的单链表首节点地址。
  4. 图的遍历:包括深度优先搜索(DFS,借助栈)和广度优先搜索(BFS,借助队列),用于访问邻接点。
  5. 图的连通性
    • 无向图:任意两顶点有路径则为连通图,非连通图的极大连通子图是连通分量。
    • 有向图:任意两顶点有双向路径为强连通图,非强连通图的极大强连通子图是强连通分量;忽略边方向后无向图连通的是弱连通图。
  6. 图的连通性判定方法
    • 无向图:用 DFS 或 BFS 从任一顶点遍历,能访问所有顶点则为连通图。
    • 有向图:用 Kosaraju 算法、Tarjan 算法等计算强连通分量判定强连通性 。

今天的分享就到这里啦~~

http://www.xdnf.cn/news/300097.html

相关文章:

  • LeetCode 3423. 循环数组中相邻元素的最大差值 题解
  • homebrew安装配置Python(MAC版)
  • Oracle01-入门
  • 个人Unity自用面经(未完)
  • 神经网络中之多类别分类:从基础到高级应用
  • ChatGPT对话导出工具-轻松提取聊天记录导出至本地[特殊字符]安装指南
  • 审计数据整合:集团多主体科目余额表合并全流程解析
  • JVM内存模型深度解剖:分代策略、元空间与GC调优实战
  • 在 Laravel 12 中实现 WebSocket 通信
  • pyqt写一个TCP(UDP)检测工具
  • 【Python】一键提取视频音频并生成MP3的完整指南 by `MoviePy`
  • 基于Jetson Nano与PyTorch的无人机实时目标跟踪系统搭建指南
  • 20250506异形拼图块(圆形、三角、正方,椭圆/半圆)的中2班幼儿偏好性测试(HTML)
  • 【ArcGISPro】属性规则--属性联动
  • 记一次ffmpeg延迟问题排查
  • 个人码支付免签系统三网免挂支付宝微信QQ钱包即时到账收款二维码聚合支付源码
  • 使用 OpenSSL 吊销 Kubernetes(k8s)的 kubeconfig 里的用户证书
  • uv全功能更新:统一管理Python项目、工具、脚本和环境的终极解决方案
  • 嵌入式学习--江协51单片机day1
  • GCC编译器安装详细说明(举例arm-2013q3)
  • pywinauto通过图片定位怎么更加精准的识别图片?
  • 抖音代播领航者——品融电商(PINKROON)的运营实力与服务解析
  • 使用 AddressSanitizer 检测堆越界错误
  • 【CPU占用率查看】
  • 创建简易个人关系图谱(Neo4j )
  • 【落羽的落羽 C++】list及其模拟实现
  • On the Biology of a Large Language Model——论文学习笔记——拒答和越狱
  • 华为私有协议Hybrid
  • 5月6日日记
  • QtGUI模块功能详细说明,图像处理(三)