逻辑结构
图的定义
- 图中的这些点叫做顶点(VerTex)
- 两个顶点的连线叫作边(Edges)
定义
- 图:Graph = (V, {E})
- V:顶点(数据元素)的有穷非空集合
- E:边的有穷集合
无向图(undirected graphs)
- 每一条边都是无方向的使用无序偶对(Vi, Vj)表示
有向图
- 性格测试游戏的模型其实就是一张有向图(Directed Graph)
每一条边都是有方向的,也称为弧(arc)
使用有序偶<Vi, Vj>表示
弧尾:Tail
弧头:Head
1.如果图中任意两个顶点之间的边都是有向边,则称该图为有向图
2.对于有向图G:G=(V, {E})
顶点结合:V = {V1,V2,V3, V4};
边集合:E = {<V1,V2>,<V1, V3>, <V4, V1>, <V3, V4>};
完全图
- 任意两个顶点都有一条边相连的图叫做完全图
- 无向完全图:有n(n-1)/2条边
- 有向完全图:n(n-1)条边
- 对于具有n个顶点和e条边的图
- 无向图:0<=e<=n*(n-1)/2
- 有向图:0<=e<=n*(n-1)
网
- 定义:网是边或弧带权的图
图的边或弧所具有的相关系数称为权(weight) - 无向网
- 有向网
子图(Subgraph)
- 定义:假设有两个图:G1=(V1, {E1})和G2 = (V2, {E2}),如果V2∈V1且E2∈E1,则称G2为G1的子图
图的顶点与边的关系
对于无向图 G=(V, {E})
- 如果边(Vi, Vj)∈E,则称顶点Vi和Vj互为邻接点(Adjacent)
- 例:顶点V1,V2, V3, V4,…互为邻接点
- 边(Vi, Vj)依附于(incident)顶点Vi和Vj(或边与顶点相关联)
- 例:边(V1, V2)依附于顶点V1和V2上
- 顶点V的度(Degree)是和V相关联的边的数量,记为TD(V)
- 例:顶点V1的度为3,顶点V4的度为2
- 上图边数为5,各顶点的度数和=3+2+3+2=10
- 无向图的边数为各顶点度数和的一半
- 公式: e = 1 2 ∑ i = 0 n T D ( V i ) e=\frac{1}{2}\sum_{i=0}^{n}TD(V_i) e=21∑i=0nTD(Vi)
对于有向图G=(V, {E})
- 如果弧(Vi, Vj)∈E,则称顶点Vi和Vj互为邻接点(Adjacent)
- 例:顶点V1,V2, V3, V4,…互为邻接点
- 弧(Vi, Vj)依附于(incident)顶点Vi和Vj(或边与顶点相关联)
- 例:边(V1, V2)依附于顶点V1和V2上
- 入度和出度
以顶点V为头的弧的数目称为V的入度(InDegree), 记为ID(V)
以顶点V为尾的弧的数目称为V的出度(InDegree), 记为OD(V)
顶点V的度:TD(V) = ID(V) + OD(V) - 结论:有向图的弧数 = 总入度 = 总出度
路径
- 连续的边构成的有序顶点集合
- 无向图G=(V, {E})中,从顶点Vi到顶点Vj的路径是如下的顶点序列
- 顶点集合:{Vi, V1, V2, …,Vm}
例如,顶点V1到顶点V4的路径
{V1, V2, V3, V4}或{V1, V3,V4}
- 顶点集合:{Vi, V1, V2, …,Vm}
- 注意:如果是有向图,则路径也应该是有向的
路径长度 - 指路径上的边或弧的数量
回路或环(cycle) - 第一个顶点到最后一个顶点相同的路径称为回路或环
简单回路或简单环 - 序列中顶点不重复出现的路径为简单路径
- 除第一个顶点和最后一个顶点外,其余顶点都不重复出现的回路
连通图(Connected Graph)
- 在图G=(V, {E})中,若对任何两个顶点Vi、Vj都存在从Vi到Vj的路径,则称G是连通图(强连通图)
小结
- 定义与术语小结
- 图的分类小结
图的基本操作
图的存储
- 图的顺序存储结构:数组(邻接矩阵)表示法
- 图的链式存储结构
- 两种存储结构的实现
- 数组(邻接矩阵)表示法:
- 示例:无向图的临接矩阵表示法