第六章图(6.1-6.3)
第六章 图
6.1图的定义和基本术语
6.1.1图的定义
图(Graph) G由两个集合V和E组成,记为G=(V,E) , 其中V是顶点的有穷非空集合,E是V中顶点偶对的有穷集合,这些顶点偶对称为边。V(G)和E(G)通常分别表示图G的顶点集合和边集合,E(G)可以为空集。若E(G)为空,则图G只有顶点而没有边。
对 于图G,若边集E(G)为有向边的集合,则称该图为有向图;若边集E(G)为无向边的集合,则称该图为无向图。在有向图中,顶点对<x, y>是有序的,它称为从顶点 x到顶点 y的一条有向边。 因此<x,y>与<y, x>是不同的两条边。顶点对用一对尖括号括起来,x是有向边的始点,y是有向边的终点。<x, y>也称作一条弧,则 x为弧尾, y为弧头。
6.1.2图的基本术语
用n表示图中顶点数目,用e表示边的数目。
- 子图:假设有两个图 G = (V, E)和 G'= (V', E'), 如果V'是V子集且 E'是E子集,则称 G'为 G 的子图。
- 无向完全图和有向完全图:对千无向图,若具有 n(n- 1)/2 条边,则称为无向完全图。对于有向图,若具有n(n- l)条弧,则称为有向完全图。
- 稀疏图和稠密图:有很少条边或弧(如 e<nlog2n)的图称为稀疏图, 反之称为稠密图。
- 权和网:在实际应用中,每条边可以标上具有某种含义的数值,该数值称为该边上的权。这些权可以表示从一个顶点到另一个顶点的距离或耗费。这种带权的图通常称为网。
- 邻接点:对于无向图 G, 如果图的边 (v, v')EE, 则称顶点 v 和 v'互为邻接点, 即 v 和 v'相邻接。边 (v, v')依附千顶点 v 和 v', 或者说边 (v, v')与顶点 v 和 v'相关联。
- 度、入度和出度:顶知的度是指和v相关联的边的数目,记为 TD 中 G2的顶点 V3的度是3。对于有向图,顶点v的度分为入度和出度。入度是以顶点v为头的弧的数目,记为ID(v); 出度是以顶点 v 为尾的弧的数目,记为ID(v)
- 路径和路径长度:在无向图 G 中,从 顶点 v 到顶点 v'的 路径是一个顶点序列 (v = v;,o,V;, 1, …, V;, m = v'), 其中 (v;,J-J, v;,1)EE, 区j�m。 如果 G 是有向图, 则路径也是有向的,顶点序列应满足 <v;,1-1, v;,1>EE, 1 旬�m。 路径长度是一条路径上经过的边或弧的数目。
- 回路或环:第一个顶点和最后一个顶点相同的路径称为回路或环。
- 简单路径、 简单回路或简单环:序列中顶点不重复出现的路径称为简单路径。除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路或简单环。
- 连通、连通图和连通分量:在无向图 G 中,如果从顶点 v 到顶点 v'有路径,则称 v 和 v'是连通的。如果对千图中任意两个顶点 V; 、 V丿EV, V; 和 VJ 都是连通的,则称 G 是连通图。图 6.1(b)中的 G2 就是一个连通图,而图 6.3 (a) 中的 G3则是非连通图,但 G3有 3个连通分量,如图6.3 (b) 所示。所谓连通分量, 指的是无向图中的极大连通子图。
6.2案例引入
案例6.1:六度空间理论
六度空间理论的出现使得人们对于自身的人际关系网络的威力有了新的认识。 但为什么偏偏是 “六度” , 而不是 “七度” 、“八度” 或者 “千百度” 呢?这可能要从人际关系网络的另外一个特征一"150定律” 来寻找解释。"150定律” 指出, 人类智力允许人类拥有稳定社交网络的人数是148人, 四舍五入大约是150人。 这样我们可以对六度空间理论做如下数学解释(并非数学证明):若每个人平均认识150人, 其六度便是1506=11 390 625 000 000, 消除一些重复的结点,也远远超过了整个地球人口的若干多倍。
6.3图的类型定义
ADTGraph{
数据对象: V是具有相同特性的数据元素的集合,称为顶点集。
数据关系:
R = {VR}
VR = {<v, w>lv, wEV且P (v, w) <v, w>表示从v到w的弧 ,
谓词P (v, w)定义了弧<v, w>的意义或信息)
基本操作:
Cr eateGraph{&G,V,VR}
初始条件:V是图的顶点集,VR是图中弧的集合。
操作结果:按V和VR的定义构造图G。
DestroyGraph { &G}
初始条件:图G存在。
操作结果:销毁图G。
Locat eVex{G,u}
初始条件:图G存在,u和G中顶点有相同特征。
操作结果:若G中存在顶点 u, 则返回该顶点在图中的位置;否则返回其他信息。
GetVex{G,v}
初始条件:图G存在,v是G中某个顶点。
操作结果:返回v的值。
PutVex(&G,v,value);
初始条件:图G存在,v是G中某个顶点。
操作结果:对 v赋值value。
FirstAdjVex(G,v)
初始条件:图G存在,v是G中某个顶点。
操作结果:返回 v的第一 个邻接顶点。若v在G中没有邻接顶点,则返回 “空” 。
NextAdjVex(G,v,w)
初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点。
第6章 图
操作结果:返回v的(相对千w的)下一 个邻接顶点。若w是v的最后一 个邻接点,则返回 “空” 。
InsertVex(&G,v)
初始条件:图G存在,v和图中顶点有相同特征。
操作结果:在图G中增添新顶点v。
DeleteVex(&G,v)
初始条件:图G存在,v是G中某个顶点。
操作结果:删除 G中顶点v及其相关的弧。
InsertArc(&G,v,w)
初始条件:图G存在,v和w是G中两个顶点。
操作结果:在G中增添弧<v, w>, 若G是无向图,则还增添对称弧<w, v>。
Dele七eArc(&G,v,w)
初始条件:图G存在,v和w是G中两个顶点。
操作结果:在G中删除弧<v, w>, 若G是无向图,则还删除对称弧<w, v>。
DFSTraverse(G)
初始条件:图G存在。
操作结果:对图进行深度优先遍历,在遍历过程中对每个顶点访问一次。
BFSTraverse(G)
初始条件:图G存在。
操作结果:对图进行广度优先遍历,在遍历过程中对每个顶点访问一次。
}ADT Graph

浙公网安备 33010602011771号