图(Graph)是一种较线性表和树更为复杂的数据结构。
在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。
在树形数据结构中,数据元素之间有着明显的层次关系,并且每一层的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。
在图结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。
图的定义
图是数据结构,加上一组基本操作,就构成了抽象数据类型。
在图中的数据元素通常被称为顶点(Vertex),V是顶点的有穷非空集合;VR是两个顶点之间的关系集合。若<v,w>∈VR,则<v,w>表示从v到w的一条弧(Are),且称v为弧尾(Tail)或初始点(Initial node),称w为弧头(Head)或终端点(Terminal node),此时的图称为有向图(Digraph)。若<v,w>∈VR必有<w,v>∈VR,即VR是对称的,则以无序对(v,w)代替这两个有序对,表示v和w之间的一条边(Edge),此时的图称为无向图(Undigraph)。
我们用n表示图中顶点数目,用e表示边或弧的数目。
对于无向图,e的取值范围是0到n(n-1)/2。有n(n-1)/2条边的无向图称为完全图(Completed graph)
对于有向图,e的取值范围是0到你(n-1)具有(n-1)条弧的有向图称为有向完全图
有很少条边或弧的图称为稀疏图(Sparse graph),反之称为稠密图(Dense graph)。
有时图的边或弧具有与它相关的数,这种与图的边或弧相关的数叫做权(Weight)这些权可以表示一个顶点到另一个顶点的距离或耗费。这种带权的图通常称为网(Network)
如果有两个图G=(V,{E})和G1=(V1,{E1}),若V1⊆V且E1⊆E则称G1为G的子图(Subgraph)
对于无向图G=(V,{E}),如果边(v,v’)∈E,则称顶点v和v’互为邻接点(Adjacent)。边(v,v’)依附(Incident)于顶点v和v’或者说(v,v’)和顶点v和v’相关联。顶点v的度(Degree)是和v相关联的边的数目,记为TD(V)。
以顶点v为头的弧的数目称为入度(InDegree),记为ID(v)
以顶点v为尾的弧的数目称为v的出度(OutDegree),记为OD(v)
一般的,如果顶点vi的度记为TD(vi),那么一个有n个顶点,e条边或弧的图,满足如下关系:
路径
路径的长度是路径的边的数目。w的长度为k。
- 起点和终点相同的路径称为回路(环)(Cycle)。
- 若路径w的顶点v0,v1……,vk,除v0和vk可以相同之外,其他顶点互不相同,则称w为简单路径。
- 如果构成回路的路径是简单路径,称此回路为简单回路。不带回路的图称为无环图。不带回路的有向图称为有向无环图。
连通图
无向图G,如果从顶点v到v’有路径,则称v和v’是连通的。如果对于无向图G中任意两个顶点vi,vj∈V,vi和vj都是连通的,则称G是连通图(Connected Graph)
连通分量(Connected Component)指的是无向图中的最大连通子图
在有向图G中,如果从顶点v到顶点v’有路径或从顶点v’到顶点v有路径,则称v和v’是连通的。
在有向图G中,如果对于每一对vi,vj ∈V,vi≠vj 从vi到vj和从vj到vi都存在路径,则称G是强连通图。
有向图中的最大强连通子图称作有向图的强连通分量
生成树
一个连通图G的一个包含所有顶点的极小连通子图T是:
- T包含G的所有顶点n个
- T为连通子图
- T包含的边数最少
T是一颗有n个顶点,n-1条边的生成树(支撑树)。
性质1:
一个有n个顶点的连通图的生成树有且仅有n-1条边。
- 如果一棵生成树有n个顶点和小于n-1条边,则为非连通图。构成一棵n个顶点的生成树需要n-1条边,少于n-1,则必有边断开不再连通。
- 如果一棵生成树有n个顶点和大于n-1条边,则一定有环。构成一棵n顶点生成树需要n-1条边,若再添加一条边,必会使得与它关联的那两个顶点之间有了第二条路径。
性质2:
一个连通图的生成树并不唯一。