数据结构——第四章图:01图相关定义

1.图的定义:图是一种网状数据结构,形式化定义如下:图Graph = (V, R),V = {x | x ∈ DataObject},R = {VR},VR = {<x, y> | P(x, y) ∧ (x, y ∈ V)}。集合DataObject中的所有元素具有相同的特性。V中的数据元素通常为顶点(vertex),VR是两个顶点之间关系的集合,P(x, y)表示x和y之间有特定的关系属性P。

(1)若<x, y> ∈ VR,则<x, y>表示从顶点x到顶点y的一条弧(arc),并称x为弧尾(tail)或起始点,称y为弧头(head)或终端点,此时图中的边是有方向的,称这样的图为有向图。

(2)若<x, y> ∈ VR,且有<y, x> ∈ VR,即VR是对称关系,这时以无序对(x, y)来代替两个有序对,表示x和y之间的一条边(edge),此时的图称为无向图。如下图,左图为无向图,右图为有向图:

          

ADT Graph

{

  数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。

  数据关系R:R = {VR},VR = {<x, y> | P(x, y) ∧ (x, y ∈ V)}

  基本操作P:

  ①CreateGraph(&G, V, VR)

     初始条件:V是图的顶点集,VR是图中弧的集合。

     操作结果:按V和VR的定义构造图G。

  ②DestroyGraph(&G)

     初始条件:图G存在。

     操作结果:销毁图G。

  ③LocateVex(G, u)

     初始条件:图G存在,u和G中顶点有相同特征。

     操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其它信息。

  ④GetVex(G, v)

     初始条件:图G存在,v是G中某个顶点。

     操作结果:返回v的值。

  ⑤PutVex(&G, v, value)

     初始条件:图G存在,v是G中某个顶点。

     操作结果:对v赋值value。

  ⑥InsertVex(&G, v)

     初始条件:图G存在,v和图中顶点有相同特征。

     操作结果:在图G中添加新顶点v。

  ⑦DeleteVex(&G, v)

     初始条件:图G存在,v是G中某个顶点。

     操作结果:删除G中顶点v及其相关的弧。

  ⑧InsertAcr(&G, v, w)

     初始条件:图G存在,v和w是G中两个顶点。

     操作结果:在G中增添弧<v, w>,若G是无向的,则还增添对称弧<w, v>。

  ⑨DeleteArc(&G, v, w)

     初始条件:图G存在,v和w是G中两个顶点。

     操纵结果:在G中删除弧<v, w>,若G是无向的,则还删除对称弧<w, v>。

  ⑩DFSTraverse(G, visit())

     初始条件:图G存在,v是G中某个顶点,visit是顶点的应用函数。

     操作结果:深度优先遍历图个G,并对每个顶点调用函数visit一次。一旦visit失败,则操作失败。

  ⑪BFSTraverse(G, visit())

     初始条件:图G存在,visit是顶点的应用函数。

     操作结果:广度优先遍历图G,并对每个顶点调用函数visit一次,一旦visit失败,则操作失败。

}

2.完全图:设n表示图中顶点个数,用e表示图中边或弧的数目,且不考虑图中每个顶点到其自身的边或弧。

(1)无向完全图:对于无向图而言,其边数e的取值范围是0~n(n-1)/2。称有n(n-1)/2条边(即图中每个顶点和其余n-1个顶点都有边相连)的无向图为无向完全图。

(2)有向完全图:对于有向图而言,其边数e的取值范围是0~n(n-1)。称有n(n-1)条弧(即图中每个顶点和其余n-1个顶点都有弧相连)的有向图为有向完全图。

3.稀疏图和稠密图:对于有很少条边的图(e < nlogn)称为稀疏图,反之称为稠密图。

4.子图:设图G = (V, {VR})和图G' = (V', {VR'}),且V' ⊆V,VR' ⊆ VR,则称G'为G的子图。

5.邻接点:对于无向图G = (V, {E}),如果边(v, v') ∈ E,则称顶点v,v'互为邻接点,即v,v'相邻接。边(v, v')依附于顶点v和v',或者说边(v, v')与顶点v和v'相关联。对于有向图G = (V, {A}),如果弧<v, v'> ∈ A,则称顶点v邻接到顶点v',顶点v'邻接自顶点v,或者说弧<v, v'>与顶点v和v'相关联。

6.度、入度和出度:对于无向图而言,顶点v的度是指和v相关联的边的数目,记作(v)。在有向图中,顶点v的度有出度和入度两部分,其中以顶点v为弧头的弧的数目称为该顶点的入度,记作ID(v),以顶点v为弧尾的弧的数目称为该顶点的出度,记作OD(v),则顶点v的度为TD(v) = ID(v) + OD(v)。

7.权与网:在一个图中,每条边上可以标上具有某种含义的数值,此数值称为该边的权,通常权为非负实数,可以表示从一个顶点到另一个顶点的距离或耗费等信息。边上带有权的图称为带权图,也常称作网。

8.路径与回路:无向图G = (V, {E})中从顶点v到v'的路径是一个顶点序列(v = vi0, vi1, vi2, ... ,vin = v'),其中(vij-1,vij) ∈ E,1 ≤ j ≤ n。如果图G是有向图,则路径也是有向的,顶点序列应满足<vij-1,vij> ∈ E,1 ≤ j ≤ n。路径的长度是指路径上经过的弧或边的数目。在一个路径中,若其第一个顶点和最后一个顶点是相同的,即v = v',则称该路径为回路或环。若表示路径的顶点序列中的顶点各不相同,则称这样的路径为简单路径。除了第一个和最后一个顶点外,其余各顶点均不重复出现的回路为简单回路。

9.连通图:在无向图G = (V, {E})中,若从vi到vj有路径相通,则称顶点vi与vj是连通的。如果对于图中的任意两个顶点vi、vj ∈ V,vi,vj都是连通的,则称该无向图G为连通图。在有向图G = (V, {A})中,若对于每对顶点vi,v∈ V且v≠ vj,从vi到vj和vj到vi都有路径,则称该有向图为强连通图。

10.连通分量:无向图中的极大连通子图称为该无向图的连通分量。任何连通图的连通分量只有一个,即其自身。非连通的无向图有多个连通分量。有向图的极大强连通子图称为G的强连通分量。强连通图只有一个强连通分量,即其自身。非强连通的有向图有多个强连通分量。

11.生成树:一个连通图的生成树是一个极小连通子图,它含有图中全部顶点,但是只有足以构成一棵树的n-1条边。如果在一棵生成树上添加一条边,必定构成一个环。如果一个图有n个顶点和小于n-1条边,则是非连通图,如果多于n-1条边则一定有环。

猜你喜欢

转载自www.cnblogs.com/hou36/p/9910357.html