第八章--图

定义

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

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

相关概念

**有向图:**边有方向。

**无向图:**边无方向。

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

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

例如:

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

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

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

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

无向完全图: 无向图中任意两个不同的顶点之间都存在一条无向边,边数为

有向完全图: 边数为

路径: 在图G=(V,E)中,从顶点 到顶点 的路径是一个顶点序列,使得对于 是图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 算法等计算强连通分量判定强连通性 。

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

相关推荐
阿维同学9 分钟前
自动驾驶关键算法深度研究
人工智能·算法·自动驾驶
YOLO大师21 分钟前
华为OD机试 2025B卷 - 小明减肥(C++&Python&JAVA&JS&C语言)
c++·python·华为od·华为od机试·华为od2025b卷·华为机试2025b卷·华为od机试2025b卷
今天背单词了吗98044 分钟前
算法学习笔记:11.冒泡排序——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·学习·算法·排序算法·冒泡排序
汤姆爱耗儿药1 小时前
专为磁盘存储设计的数据结构——B树
数据结构·b树
看到我,请让我去学习2 小时前
OpenCV编程- (图像基础处理:噪声、滤波、直方图与边缘检测)
c语言·c++·人工智能·opencv·计算机视觉
倔强的小石头_4 小时前
【C语言指南】函数指针深度解析
java·c语言·算法
Yasin Chen4 小时前
C# Dictionary源码分析
算法·unity·哈希算法
_Coin_-5 小时前
算法训练营DAY27 第八章 贪心算法 part01
算法·贪心算法
许小燚9 小时前
线性表——双向链表
数据结构·链表
董董灿是个攻城狮9 小时前
5分钟搞懂什么是窗口注意力?
算法