一:图的定义
一个图G=(V,E)由定点集V和边集E组成,每一条边都是一个点对(v,w),其中v,w属于V。如果点对是有序的,那么图就叫做有向的。有向的图有时也叫做有向图。定点v,w邻接当且仅当(v,w)属于E。有时候边还有第三种成分,称为权或值。
图的一条路径是一个顶点序列W1,W2,W3~Wn,使得(Wi,Wi+1)属于E,这样一条路径的长是该路径上的边数,它等于N-1.。从一个顶点到它自身可以看作是一条路径,如果路径不包含边,那么路径长为0,这是定义特殊情况的方便的方法。如果图含有一条从一个顶点到它自身的边(v,w),那么路径v,w也叫做一个环。为们讨论的图一般是无环的。
一条简单路径是这样的:其上所有顶点都是互异的,但第一个顶点和最后一个顶点可能相同。
如果一个无向图中从每一个顶点到每个其他顶点都存在一条路径,则称其为连同的。具有这样性质的有向图称为是强连通的。如果一个有向图不是强连通的,但是它的基础图,即弧上去掉方向所形成的图是连通的,那么该有向图称为是弱连通的。完全图是其每一对顶点间都存在一条边的图。
二:图的表示
我们将考虑有向图(无向图可以类似表示)
表示图的一种简单的方法是使用二维数组,称为邻接矩阵表示法。对于每一条边(u,v),我们置A[u][v]=1,否则数组元素就置0,也就是如果边存在就是1,不存在就是0,如果有权
就将权赋给A[u][v]。而使用一个很大或很小的权做为标记来表示一条不存在的边。
邻接矩阵法很简单,但是它的缺点也很明显,如果一个图的边不多的话,它太浪费空间了,因为矩阵所需要的空间是N^2。如果图的边比较多,那这是比较合适的方法。
如果图是稀疏的,更好的办法是用邻接表来表示。对每一个顶点,我们使用一个表存放所有邻接的顶点。数组表示不方便的一般都用链表代替。
邻接表是表示图的标准方法,每条边出现在俩个表中,所以此空间的使用是双倍的。