线性表中每个数据只有一个直接前驱和一个直接后驱;
树形结构中每个数据只有一个直接前驱,可以有多个直接后驱;
图形结构中结点的关系是任意的。
图中的元素称为顶点(Vertex),在图结构中不准没有顶点,顶点之间的逻辑关系用边来表示。
图的定义
若顶点
![]()
到
![]()
之间的边没有方向,则称这条边为
无向边(Edge),用无序偶
![]()
来表示。如果图中任意两顶点之间的边都是无向边,则称该图为
无向图(Undirected graphs)。
若顶点
![]()
到
![]()
之间的边有方向,则称这条边为
有向边,也称为
弧(Arc)。用有序偶
![]()
来表示,
![]()
称为
弧尾(Tail),
![]()
称为
弧头(Head)。如果图中任意两顶点之间的边都是有向边,则称该图为
有向图(Directed graphs)。
在图中,如果不存在顶点到其自身的边,且同一边不重复出现,则称这样的图为简单图,下面这两均不是简单图:
在无向图中,如果任意两顶点之间就都存在边,则称该图为无向完全图;同理,在有向图中任意两点都存在方向互为相反的两条弧,则称该图为有向完全图。
有很少边或者弧的图称为稀疏图,反之称为稠密图,二者均为模糊概念,没有明确的数目界定如何为稠密或者稀疏。
下图边或者弧相关的数叫做权(Weight),这种带权的图称为网(Network):
下图中右边阴影区图均为左图的子图(Subgraph):
图的顶点与边间的关系
对于无向图
![]()
,如果边
![]()
,则称顶点
![]()
和
![]()
互为邻接点(Adjacent),即
![]()
和
相邻接。边
依附(incident)于顶点
![]()
和
![]()
,或者说边
![]()
与顶点
![]()
和
相关联。顶点
![]()
的
度(degree)是和
![]()
相关联的边的数目,记为
![]()
。
对于有向图
![]()
,如果边
![]()
,则称顶点
![]()
邻接到顶点
![]()
,顶点
![]()
邻接自顶点
![]()
。弧
![]()
与顶点
![]()
和
相关联。以顶点
![]()
为头的弧数目称为
![]()
的
入度(InDegree),记为
![]()
,以顶点
![]()
为尾的弧数目称为
![]()
的
出度(OutDegree),记为
![]()
,顶点的度
![]()
。
无向图
![]()
中从顶点
![]()
到
![]()
的
路径(path)是一个顶点序列。对于有向图,则
路径也是有向的。路径的长度为路径上边或者弧的数目。第一个顶点到最后一个顶点相同的路径称为
回路或者环(cycle)。序列中顶点不重复出现的路径称为
简单路径。
连通图
在无向图
![]()
中,如果从
![]()
到
![]()
有路径,则称
![]()
和
![]()
是连通的。如果对于图中任意两个顶点
![]()
,
![]()
和
![]()
都是连通的,则称
![]()
是
连通图(Connected Graph)。无向图中的
极大 连通子图 称为
连通分量。
一个连通图的生成树是一个极小的连通子图,它含有图中全部的
![]()
个顶点,但只足以构成一棵树的
![]()
条边。
在有向图
![]()
中,如果对于每一对
![]()
,
![]()
,从
![]()
到
![]()
和从
![]()
到
![]()
都存在路径,则称
![]()
为
强连通图。有向图中的极大强连通子图称为有向图的
强连通分量。
如果一个有向图恰好有一个顶点的入度为0,其余顶点的入度为1,则是一棵有向树。一个有向图的生成森林由若干棵有向树组成,含有图中所有顶点,但只有足以构成若干棵不相交的有向树的弧。下图中图2、3构成了图1的生成森林。