第八章--图

定义

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

再详细点的定义就是:图由顶点集合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 算法等计算强连通分量判定强连通性 。

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

相关推荐
纪元A梦3 小时前
华为OD机试真题——荒岛求生(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
java·c语言·javascript·c++·python·华为od·go
-qOVOp-3 小时前
zst-2001 历年真题 数据结构
数据结构
爱吃涮毛肚的肥肥(暂时吃不了版)4 小时前
仿腾讯会议——创建房间&加入房间
c++·qt·面试·职场和发展·腾讯会议
Kidddddult4 小时前
力扣刷题Day 37:LRU 缓存(146)
算法·leetcode·力扣
生信碱移5 小时前
TCGA数据库临床亚型可用!贝叶斯聚类+特征网络分析,这篇 NC 提供的方法可以快速用起来了!
人工智能·python·算法·数据挖掘·数据分析
wang__123005 小时前
力扣1812题解
算法·leetcode·职场和发展
_Power_Y6 小时前
面试算法刷题练习1(核心+acm)
算法·面试
代码AC不AC6 小时前
【C++】类和对象【下】
开发语言·c++·类和对象·学习分享·技术交流
Leo来编程6 小时前
算法-时间复杂度和空间复杂度
算法
阳洞洞6 小时前
leetcode 141. Linked List Cycle
数据结构·leetcode·链表·双指针