正文之前
由于最近学习的 数据结构和算法 以及 离散数学 两门课都涉及到了 图 这个知识点,正好借此机会归纳一下我所学的内容。
正文
一个图看起来是由一些小圆点(称为顶点或结点)和连接这些圆点的直线或曲线(称为边)组成的 —Wikipedia
图的定义:
图G是由两个集合V和E组成(记做 G = (V, E)):
V = {v1,v2,v3,...vn,} 是由G的结点(vertex)组成的集合
E = {e1,e2,e3,...en} 是由连接两个结点的边(edge)组成的集合(无向图)若边e(唯一的边)连接结点v1和v2, 则表示为 e = (v1,v2)或 e = (v2,v1),表示连接结点v1和结点v2的边
(有向图)若边e(唯一的边)连接有序结点对v1和v2, 则表示为 e = (v1,v2),
表示一条从结点v1到结点v2的边(有向图和无向图)G中的一条边连接结点v1和结点v2,则称结点v1和结点v2相关联,结点v1和结点v2是相邻结点
-
(有向图和无向图)一般情况下,E 和 V 都是有限的集合,且 V 为非空
在此无边图中
结点v1、结点v2、结点v3和结点v4都没有边与之相连,所以称这四个结点为孤立顶点(isolated vertex)
图的分类:
图的分类很多种,包括有/无向图,简单图/多重图等等
有向图(directed graph):图的每一条边带有一个箭头,表示一个方向
无向图(undirected graph):图的每一条边不带箭头,没有方向
简单图(simple graph):既没有圈也没有平行边的图称为简单图
多重图(multigraph):含有圈和平行边的图,支持两结点间的边数多于一条
一般情况下所称的图是无向图,圈和平行边的定义将在下文给出。
在此多重图中
- 边e2和边e3都连接了结点v2和结点v3,所以称边e2和边e3为平行边(parallel edge)。
- 边e5 = (v4,v4),所以称边e5为圈(loop)。
图的结构
将以此图举例解释以下内容
路径
- 路径(path):从一个结点v1到另一个结点vn所经过的路程,表示为(v1,e1,v2,e2,...en,vn)
例如:(v1,e10,v7,e7,v6,e5,v5,e4,v4,e6,v7)
- 简单路径(simple path):从结点vi到vj的不存在重复结点的路径
例如:(v1,e1,v2,e2,v3)
回路
- 回路(cycle):从vi到vi的路径,长度非0,不存在重复边的路径
例如:(v1,e10,v7,e7,v6,e5,v5,e4,v4,e6,v7,e9,v8,e11,v1)
- 简单回路(simple cycle):从vi到vi的回路,除了开始和结束的结点相同之外,不存在相同的结点
例如:(v1,e10,v7,e9,v8,e11,v1)
连通图(connected graph)
- 存在从任意一个结点vi到另外一个任意结点vj的路径的图(所有结点都是连通的图),反之,就是非连通图,上述的简单图和多重图都是连通图
子图
- 在非联通图G中,通常有多个部分,每个部分都称为G的子图
G1 = (V, E), V = {v1,,v2,v3}, E = {e1,e2,e3}
G2 = (V, E), V = {v4,v5}, E = {e4}
G3 = (V, E), V = {v6}, E为空集