要理解图这种能描述"多对多"关系的复杂结构,需从其基本构成、类型区分及核心术语入手。图由顶点集合与边集合组成,可根据边的方向、连通性等分为不同类型,下面结合示例展开讲解。
5.1.1 图的定义
图是用于刻画"多对多"关系的非线性数据结构,形式化表示为( G = (V, E) ):其中( V )是顶点集 (由有限个代表"实体"的顶点组成,且非空),( E )是边集(由有限个代表"实体间关系"的边或弧组成)。
1. 有向图与无向图:边的方向特性
根据边是否具有"方向",图可分为有向图 和无向图,两者的核心区别在于"边的方向性"。
(1)有向图:带方向的"弧"
若图中的边是"有方向的",则称该图为有向图。有向图的边称为弧 ,用有序对( <v_i, v_j> )表示:( v_i )是弧尾 (起点),( v_j )是弧头(终点),表示"( v_i )指向( v_j )"的单向关系(( <v_i, v_j> )与( <v_j, v_i> )是两条不同的弧)。
结合图6.1(a)"有向图( G_1 )"理解:图中顶点为( {1,2,3} ),弧包括( <1,2> )(1指向2)、( <2,1> )(2指向1)、( <2,3> )(2指向3)。可见,有向图的弧是"单向"的,不同方向的弧代表不同关系。
(2)无向图:无方向的"边"
若图中的边是"无方向的",则称该图为无向图。无向图的边用无序对( (v_i, v_j) )表示,说明( v_i )与( v_j )是双向连通的(( (v_i, v_j) )与( (v_j, v_i) )是同一条边)。
结合图6.1(b)"无向图( G_2 )"理解:图中顶点为( {1,2,3,4} ),边包括( (1,2) )、( (1,3) )、( (1,4) )、( (2,3) )、( (2,4) )、( (3,4) )。比如边( (1,2) )表示"顶点1与顶点2可双向到达",无需区分方向。
2. 特殊形态的图:完全图与连通分量
除有向、无向的基本分类外,图还有"完全图""连通分量"等特殊形态,反映了图的"密集程度"或"连通特性"。
(1)完全图:顶点间的"全连接"
- 无向完全图 :若含( n )个顶点的无向图中,任意两个顶点间都存在一条边,则称为无向完全图。此时边的总数为( \frac{n(n-1)}{2} )(每个顶点与其余( n-1 )个顶点各连一条边,每条边被重复计算两次,故除以2)。
- 有向完全图 :若含( n )个顶点的有向图中,任意两个顶点间都存在两条方向相反的弧(( <v_i, v_j> )和( <v_j, v_i> )),则称为有向完全图。此时弧的总数为( n(n-1) )(每个顶点向其余( n-1 )个顶点各发一条弧)。
结合图6.1©"有向完全图( G_3 )"理解:图中仅2个顶点,有向完全图需包含( <1,2> )和( <2,1> )两条弧,与图示一致;若顶点数为3,有向完全图的弧数应为( 3×2=6 )(每对顶点间两条弧)。
(2)连通与连通分量:无向图的"连通性"
- 连通 :在无向图中,若从顶点( v_i )到顶点( v_j )存在路径 (顶点序列,相邻顶点间有边),则称( v_i )与( v_j )"连通"。若图中任意两个顶点都连通,则该无向图是"连通图"。
- 连通分量 :无向图中的极大连通子图称为连通分量。"极大"指:子图要包含"尽可能多的顶点和边"(若再加入原图的其他顶点,子图就不再连通)。
结合图6.2"无向图及其连通分量"理解:图6.2(a)的无向图( G_4 )包含多组不连通的顶点(如( A )所在组与( F )所在组无路径),因此不是连通图;图6.2(b)将其拆分为3个连通分量,每个分量内部任意两顶点都连通,且无法再加入( G_4 )的其他顶点而保持连通(比如( A、B、C、E、D )为一个分量,( F、G、H )为一个分量,( I、J )为一个分量)。
3. 图的基础术语:度、路径与环
为更精确描述图的结构,还需掌握"度""路径""环"等核心术语。
(1)顶点的度:关联边的数量
- 无向图的度 :无向图中,顶点( v )的度( TD(v) )是与( v )关联的边的数目。例如图6.1(b)中,顶点1的度为3(与2、3、4各连一条边),顶点2的度也为3(与1、3、4各连一条边)。
- 有向图的入度与出度 :有向图中,顶点( v )的入度 ( ID(v) )是"指向( v )的弧的数量"(弧头为( v ));出度( OD(v) )是"从( v )出发的弧的数量"(弧尾为( v ))。顶点的总度( TD(v) = ID(v) + OD(v) )。例如图6.1(a)中,顶点1的出度为1(弧( <1,2> ))、入度为1(弧( <2,1> )),总度为2;顶点2的出度为2(弧( <2,1> )、( <2,3> ))、入度为1(弧( <1,2> )),总度为3。
(2)路径与路径长度:顶点的序列
- 路径 :从顶点( v_p )到顶点( v_q )的路径是顶点序列( v_p, v_{i1}, v_{i2}, \dots, v_{ik}, v_q ),要求相邻顶点间有边(无向图)或弧(有向图,且弧的方向与路径方向一致)。
- 路径长度:路径上的边或弧的数目。例如图6.1(a)中,从顶点1到顶点3的路径为( 1→2→3 ),长度为2(两条弧)。
(3)简单路径与环:顶点的重复特性
- 简单路径 :路径中顶点不重复出现的路径,称为简单路径。
- 环(回路) :起点与终点相同的简单路径(除起点和终点外,其他顶点不重复),称为环。例如图6.1©中,( 1→2→1 )是长度为2的有向环;图6.1(b)中,( 1→2→3→1 )是长度为3的无向环。
综上,图通过"顶点"和"边/弧"的组合,能灵活描述复杂的多对多关系;有向图与无向图的区分、完全图的密集性、连通分量的划分,以及度、路径等术语,共同构成了图的基础概念体系,为后续图的存储、遍历与应用提供了理论支撑。