18.0、C语言数据结构——图 ( 1 )
在前边讲解的线性表中,每个元素之间只有一个直接前驱和一个直接后继,在树形结构中,数据元素之前是层次关系,并且每一次上的数据元素可能和下层中多个元素相关,但可能和上层中一个元素相关;
图(Graph)是由定点的有穷非空集合和定点之间边额集合组成,通常表示为:G(V,E),其中,G 表示一个图,V 是图 G 中顶点的集合,E 是图 G 中边的集合;
对于图的定义,我们需要明确几个注意的地方:
- 线性表中我们把数据元素叫元素,树种叫结点,在图中数据元素我们则称为顶点(Vertex)
- 线性表可以没有数据元素,称为空表,树种可以没有结点,叫做空树,而图结构在国内大部分的教材中强调顶点集合 V 要有穷非空;
- 线性表中,相邻的元素之间具有线性关系,树结构中,相邻两层的结点具有层次关系,而图结构中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空;
无向边:若顶点 Vi 到 Vj 之间的边没有方向,则称这条边为无向边(Edge),用无序偶(Vi,Vj)来表示;
上图 G1 是一个无向图,G1 = {V1,E1},其中 ->
- V1 = {A,B,C,D};
- E1 = { ( A , B ) , ( B , C ) , ( C , D ) , ( D , A ) , ( A , C ) }
有向边:
若从顶点 Vi 到 Vj 的边有方向,则称这条边为有向边,也称为 弧 (Arc),用有序偶(Vi,Vj)来表示,Vi 称为弧尾,Vj 称为弧头;
上图 G2 是一个无向图,G2 = { V2,E2 },其中 ->
- V2 = { A , B , C , D };
- E2 = { < B , A > , < B , C > , < C , A > , < A , D > } ;
简单图:
在图结构中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图 ->
以下两个则不属于简单图:
无向完全图:
在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图;含有 n 个项点的无向完全图有 n * ( n - 1 ) / 2条边;
有向完全图:
在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则成为该图为有向完全图;含有 n 个顶点的有向完全图有 n * ( n - 1 ) 条边;
稀疏图和稠密图:
这里的稀疏和稠密是模糊的概念,都是相对而言的,通常认为边或弧数小于 n * logn(n是顶点的个数)的图称为稀疏图,反之称为稠密图;
有些图的边或弧带有与他相关的数字,这种与图的边或弧相关的数叫做权(Weight),带权的图通常称为网(Network)
假设有两个G1 = (V1 , E1)和 G2 = (V2,E2),如果 V2 ⊆ V2 , E2 ⊆ E1,则称 G2 为 G1 的子图(Subgraph)