C#数据结构与算法揭秘十

这篇文章,我们来讨论图的相关知识。

一、究竟什么图装结构了,所谓的图是图状结构简称图,是另一种非线性结构,它比树形结构更复杂。树形结构中的结点是一对多的关系,结点间具有明显的层次和分支关系。每一层的结点可以和下一层的多个结点相关,但只能和上一层的一个结点相关。而图中的顶点(把图中的数据元素称为顶点)是多对多的关系,即顶点间的关系是任意的,图中任意两个顶点之间都可能相关。也就是说,图的顶点之间无明显的层次关系,这种关系在现实世界中大量存在。因此,图的应用相当广泛,在自然科学、社会科学和人文科学等许多领域都有着非常广泛的应用。例如搜索引擎,地图等等。如图所示:

图(Graph)是由非空的顶点(Vertex)集合和描述顶点之间的关系——边(Edge)或弧(Arc)的集合组成。其形式化定义为:
G=(V,E)
V={vi| vi∈某个数据元素集合}
E={(vi,vj)| vi,vj∈V∧P(vi,vj)}或E={<vi,vj>| vi,vj∈V∧P(vi,vj)}
其中, G 表示图, V 是顶点的集合, E 是边或弧的集合。 在集合 E 中, P(vi,vj)表示顶点 vi 和顶点 vj 之间有边或弧相连。图给出了计算机图的示例。

在上图中,V={A,B,C,d,E}
E={(A,B),(B,E),(E,C),(C,D),(D,A)}

 

下面是一些图的术语的介绍。

1、 无向图: 在一个图中, 如果任意两个顶点vi和vj构成的偶对(a,b)∈E是无序的,即顶点之间的连线没有方向,则该图称为无向图(Undirected Graph)。如图所示:

 

2、有向图:在一个图中,如果任意两个顶点i和j构成的偶对<i,j>∈E(i,j∈(a-z))是有序的,即顶点之间的连线有方向,则该图称为有向图(Directed Graph)。下图是一个有向图。

3、边、弧、弧头、弧尾:无向图中两个顶点之间的连线称为边(Edge),边用顶点的无序偶对(i,j)表示,称顶点i和顶点j互为邻接点(Adjacency Point),(i,j)边依附与顶点i和顶点j。有向图中两个顶点之间的连线称为弧(Arc),弧用顶点的有序偶对<i,j>表示,有序偶对的第一个结点i称为始点(或弧尾) ,在图中不带箭头的一端;有序偶对的第二个结点j称为终点(或弧头) ,在图中带箭头的一端。如图所示:

4、无向完全图:在一个无向图中,如果任意两个顶点之间都有边相连,则称该图为无向完全图(Undirected Complete Graph)。可以证明,在一个含有 n个顶点的无向完全图中,有 n(n-1)/2条边。如图所示

5、有向完全图:在一个有向图中,如果任意两个顶点之间都有弧相连,则称该图为有向完全图(Directed Complete Graph)。可以证明,在一个含有 n个顶点的有向完全图中,有 n(n-1)条弧。如图所示:

6、顶点的度、入度、出度:在无向图中,顶点 v 的度(Degree)是指依附于顶点 v 的边数, 通常记为 TD(v)。 在有向图中, 顶点的度等于顶点的入度(In Degree)与顶点的出度之和。 顶点v的入度是指以该顶点v为弧头的弧的数目, 记为ID(v);顶点 v 的出度(Out Degree)是指以该顶点 v 为弧尾的弧的数目,记为 OD(v)。所以,顶点 v 的度 TD(v)= ID(v)+ OD(v)。

 

7、权、网:有些图的边(或弧)附带有一些数据信息,这些数据信息称为边(或弧)的权(Weight) 。在实际问题中,权可以表示某种含义。比如,在一个地方的交通图中,边上的权值表示该条线路的长度或等级。在一个工程进度图中,弧上的权值可以表示从前一个工程到后一个工程所需要的时间或其它代价等。边(或弧)上带权的图称为网或网络(Network) 。下图是带权图的示例图

8、子图:设有两个图 G1=(V1,E1) ,G2=(V2,E2) ,如果 V1是 V2子集,V1也是 E2的子集, 则称图 G1是 G2的子图(Subgraph)。 下图是子图的示例图。

9、路径、路径长度:在无向图G中,若存在一个顶点序列Vp,Vi1,Vi2,…,Vim,Vq,使得(Vp,Vi1) , (Vi1,Vi2) ,…, (Vim,Vq)均属于E(G) 。则称顶点Vp到Vq存在一条路径(Path)。若G为有向图,则路径也是有向的。它由E(G)中的弧<Vp,Vi1>,<Vi1,Vi2>,…,<Vim,Vq>组成。路径长度(Path Length)定义为路径上边或弧的数目。在下图中,从顶点A到顶点B存在 4条路径,长度分别为10、100、120。在图 6.2中,从顶点 a到顶点 F存在 2条路径,长度分别为 2和3。

 

10、简单路径、回路、简单回路:若一条路径上顶点不重复出现,则称此路径为简单路径(Simple Path)。第一个顶点和最后一个顶点相同的路径称为回路(Cycle)或环。 除第一个顶点和最后一个顶点相同其余顶点都不重复的回路称为简单回路(Simple Cycle),或者简单环。 如图所示:

11、连通、连通图、连通分量:在无向图中,若两个顶点之间有路径,则称这两个顶点是连通的(Connect)。如果无向图 G 中任意两个顶点之间都是连通的,则称图 G 是连通图(Connected Graph)。连通分量(Connected Compenent)是无向图 G 如图所示:

12、强连通图、强连通分量:在有向图中,若图中任意两个顶点之间都存在从一个顶点到另一个顶点的路径,则称该有向图是强连通图(Strongly Connected Graph) 。 有 向 图 的 极 大 强 连 通 子 图 称 为 强 连 通 分 量 (Strongly Connected Component)。极大强连通子图是一个有向图的强连通子图,该子图不是该图的其它强连通子图的子图。 图 a是强连通图, 图b是强连通分量的示例图.

生成树:所谓连通图 G 的生成树(Spanning Tree)是指 G 的包含其全部顶点的一个极小连通子图。 所谓极小连通子图是指在包含所有顶点并且保证连通的前
提下包含原图中最少的边。一棵具有 n个顶点的连通图 G 的生成树有且仅有 n-1条边,如果少一条边就不是连通图,如果多一条边就一定有环。但是,有 n-1条
边的图不一定是生成树。下图就是图的一棵生成树。

上面是我对图形结构的介绍,下篇文章介绍图形结构的源代码实现了。呵呵呵。

posted on 2012-11-06 14:45  laozhu1124  阅读(2291)  评论(1编辑  收藏  举报

淘宝免费计数器