摘录From大话数据结构。
1.图
图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常标示为:G(v,e),其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。
需要注意的是,线性表中我们把数据元素叫做元素,树中将数据元素叫结点,在图中数据元素,我
我们则称之为 订单(Vertex).顶点的集合V有穷非空的。
无向边:若顶点v1到v2之间的边没有方向,则称这条边为无向边(Edge),用无序偶对(vi,vj)来标示。
如果图中任意两个顶点之间的边都是无向边,则称该图为无向图。
有向边:若从顶点vi到vj的边有方向,则称这条边为有向边,也成为弧(Arc),用有序偶<vi,vj>来表示,其中
vi成为弧尾(Tail),vj称为弧头(Head).如果图中任意两个顶点之间的边都是有向边,则称该图为有向图。比如顶点A指向顶点B的一个图,<A,D>标示弧,不能写成<D,A>。
在图中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图,下面俩图是不满足的,不满足的!
在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。如下:
在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。
如下:
结论:对于n个订单和e条边的图,无向图 0 <= e <= n(n-1)/2,有向图 0 <= e <= n (n-1)
与图的边或弧相关的数叫权(Weight),带权的图成为网。
连通图是指从一个顶点到另外一个顶点,一定有路径可以到达。
还有其他图的一些概念。
2.图的存储结构
图的邻接矩阵存储方式是用两个数组来标示图,一个一维数组存储图中顶点信息,一个二维数组(成为邻接矩阵)
存储图中的边或弧的信息。如下:
邻接矩阵是不错的一种图存储结构,但是对于边数相对顶点较少的图,这种结构对存储空间是极大浪费的。比如下面的图,浪费空间:
我们用数组+链表结合的存储方式,即邻接表的方式来存储。
十字链表: