图论中的概念及重要算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图论中的概念及重要算法
常州一中林厚从
chi、图论中的基本概念
一、图的概念
简单讲,一个图是由一些点和这些点之间的连线组成的。严格意义讲,图是一种数据结构,定义为:graph= (V,E), V是点(称为"顶点”)的非空有限集合,E是线(称为"边”)的集合,边一般用(V x,V y)表示,其中V x,V y属于V。
图(A)共有 4 个顶点、5 条边,表示为:V={v i, V2, V3, V4},E={(V i,V2),(V i,V3),
(V i,V4),(V2,V3),(V2,V4)}
二、无向图和有向图
如果边是没有方向的,称此图为“无向图” ,如图(A)和图(C),用一对圆括号表示无向边,如图(A)中的边(V i,V2),显然(V x,▼『)和(V y,V x)是两条等价的边,所以在上面E 的集合中没有再出现边(V2,V i)。
如果边是有方向(带箭头)的,则称此图为“有向图”,如图(B),用一对尖括号表示有向边,如图(B)中的边<V i,V2>。把边<v x,v y>中V称为起点,v y称为终点。显然此时边w,V y>与边<V y,V x>是不同的两条边。有向图中的边又称为弧,起点称为弧头,终点称为弧尾。
图(B)表示为:V={V i,V2,V3},E={<V i,V2>,<V i,V3>,<
V2,V3>,<V3,V2>}
如果两个顶点U V之间有一条边相连,则称U V这两个顶点是关联的。
三、带权图
一个图中的两顶点间不仅是关联的,而且在边上还标明了数量关系,如图(C),这种数量关系可能是距离、费用、时间、电阻等等,这些数值称为相应边的权。边上带有权的图称为带权图,也称为网(络)。
四、阶
图中顶点的个数称为图的阶。图(A)、图(B)、图(C)的阶分别为4、3、5。
五、度
图中与某个顶点相关联的边的数目,称为该顶点的度。度为奇数的顶点称为奇点,度为偶数的顶点称为偶点。图(A)中顶点V i,V2是奇点,V3,V4是偶点。
在有向图中,把以顶点V为终点的边的数目称为顶点V的入度,把以顶点U为起点的边
的数目称为顶点U的出度,出度为0的顶点称为终端顶点。如图(B)中顶点V i的入度是0、出度是2, V2的入度是2、出度是1, V3的入度是2、出度是1,没有终端顶点。
定理1:无向图中所有顶点的度之和等于边数的2倍,有向图中的所有顶点的入度之和等于所有顶点的出度之和。
定理2:任意一个无向图一定有偶数个(或0个)奇点。
六、完全图
若无向图中的任意两个顶点之间都存在着一条边,有向图中的任意两个顶点之间都存在
着方向相反的两条边,则称此图为完全图。n阶完全有向图含有n*(n-1)条边,n阶完全无向
图含有n*(n-1)/2 条边,当一个图接近完全图时,称为稠密图;相反,当一个图的边很少时,称为稀疏图。
七、子图
设有两个图G = (V, E)和G' =(V, E'),若V是V的子集,E'是E的子集,则称G为G 的子图。
八、路(径)
在一个G =(V,E)的图中,从顶点v到顶点v '的一条路径是一个顶点序列V io,V i1 , V i2 , ....... , V im,其中V io = V , V im = v ',若此图是无向图,贝U (V j-1 , V j )€ E, 1< j w m 若
此图是有向图,贝y
顶点不重复出现的路径称为简单路径,顶点V和顶点V’相同的路径称为回路(或环)。除了
第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路(或简单环)。
九、连通图
在无向图G中,如果从顶点U到顶点V有路径,则称U和V是连通的。如果对于图G中的任意两个顶点U和V都是连通的,则称图G是连通图,否则称为非连通图。
在有向图G中,如果对于任意两个顶点U和V,从U到V和从V到U都存在路径,则称
图G是强连通图。
Ch2、图的存储结构
邻接矩阵表示法
邻接矩阵是表示顶点之间相邻关系的矩阵,设G={V, E}是一个度为n的图(顶点序号分
别用1, 2, n表示),则G的邻接矩阵是一个n阶方阵,G[i,j]的值定义如下:
1或权值当V i与V j之间有边或弧时,取值为1或权值G[ i , j ]= Y
0当V i与V j之间无边或弧时,取值为0或无穷大)上面3个图对应的邻接矩阵分别如下:
0 1 1 10 1 1g 5 8 m3
G (A)= 1 0 1 1G ( B)=0 0 1G (C)= 5 8 2 g 6
1 10 00 1 08
2 g 10 4
1 10 0g g 10 g 11
3 6
4 11 g
米用邻接矩阵表示图,直观方便,很容易查找图中任两个顶点i和j之间有无边(或弧), 以及边上的权值,只要看A[i,j]的值即可,因为可以根据i,j的值随机查找存取,所以时间
复杂性为0( 1 )。也很容易计算一个顶点的度(或入度、出度)和邻接点,其时间复杂性均
为0(n)。但是,邻接矩阵表示法的空间复杂性为0(n*n),如果用来表示稀疏图,则会造成
很大的空间浪费。
二、边集数组表示法
边集数组是利用一维数组存储图中所有边的一种图的表示方法。每个数组元素存储一条边的起点、终点和权值(如果有的话)。在边集数组中查找一条边或一个顶点的度都需要扫描整个数组,所以其时间复杂性为0( e),e为边数。这种表示方法适合那些对边依次进行处理的运算,而不适合对顶点的运算和对任意一条边的运算。从空间复杂性上讲,边集数组适合于存储稀疏图。
三、邻接表表示法(链式存储法)
邻接表表示法是指对图中的每个顶点V i (1 < i w n)建立一个邻接关系的单链表,并把
它们的表头指针用一维向量数组存储起来的一种图的表示方法。为每个顶点V (1w i w n)
建立的单链表,是表示以该顶点为起点的所有边的信息(包括一个终点(邻接点)序号、一个权值和一个链接域)。一维向量数组除了存储每个顶点的表头指针外,还要存储该顶点的编号i。图(C的邻接表表示为:
-I屮|・| [纠技|』一〉| 5丨3】nil
5引2[■i^n 丨「I 皿1丨
引1皿牛2 !,日~4丨训斗—>1 5 I 4 I nil| 今| 3|10 扌| 11 [ nil]
刿 1 丨 3 2 6 3 丨 4 ]国_R 5 I 11 I 圧亍|
图的邻接表表示法便于查找任一顶点的关联边及邻接点,只要从表头向量中取出对应的
表头指针,然后进行查找即可。由于无向图的每个顶点的单链表平均长度为2e/n,所以查找运算的时间复杂性为0(e/n)。对于有向图来说,想要查找一个顶点的后继顶点和以该顶点为起点的边、包括求该顶点的出度都很容易;但要查找一个顶点的前驱顶点和以此顶点为终点的边、以及该顶点的入度就不方便了,需要扫描整个表,时间复杂度为0(n+e)。所以,对
于经常查找顶点入度或以该顶点为终点的关联边的运算时,可以建立一个逆邻接表,该表中每个顶点的单链表存储的是所有以该点为终点的关联边信息。甚至还可以把邻接表和逆邻接表结合起来,构造出“十字邻接表”,此时,每个边结点的数据信息包含五个域:起点、终点、权、以该顶点为终点的关联边的链接、以该顶点为起点的关联边的链接。表头向量的结点也包括三个域:顶点编号、以该点为终点的表头指针域、以该点为起点的表头指针域。
Ch3图的遍历
一、概念
从图中某一顶点出发系统地访问图中所有顶点,使每个顶点恰好被访问一次,这种运算
操作被称为图的遍历。为了避免重复访问某个顶点,可以设一个标志数组visited[i],未访
问时值为false,访问一次后就改为true。