1.图的定义:图是一种网状数据结构,形式化定义如下:图Graph = (V, R),V = {x | x ∈ DataObject},R = {VR},VR = {<x, y> | P(x, y) ∧ (x, y ∈ V)}。集合DataObject中的所有元素具有相同的特性。V中的数据元素通常为顶点(vertex),VR是两个顶点之间关系的集合,P(x, y)表示x和y之间有特定的关系属性P。
(1)若<x, y> ∈ VR,则<x, y>表示从顶点x到顶点y的一条弧(arc),并称x为弧尾(tail)或起始点,称y为弧头(head)或终端点,此时图中的边是有方向的,称这样的图为有向图。
(2)若<x, y> ∈ VR,且有<y, x> ∈ VR,即VR是对称关系,这时以无序对(x, y)来代替两个有序对,表示x和y之间的一条边(edge),此时的图称为无向图。如下图,左图为无向图,右图为有向图:
ADT Graph
{
数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。
数据关系R:R = {VR},VR = {<x, y> | P(x, y) ∧ (x, y ∈ V)}
基本操作P:
①CreateGraph(&G, V, VR)
初始条件:V是图的顶点集,VR是图中弧的集合。
操作结果:按V和VR的定义构造图G。
②DestroyGraph(&G)
初始条件:图G存在。
操作结果:销毁图G。
③LocateVex(G, u)
初始条件:图G存在,u和G中顶点有相同特征。
操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其它信息。
④GetVex(G, v)
初始条件:图G存在,v是G中某个顶点。
操作结果:返回v的值。
⑤PutVex(&G, v, value)
初始条件:图G存在,v是G中某个顶点。
操作结果:对v赋值value。
⑥InsertVex(&G, v)
初始条件:图G存在,v和图中顶点有相同特征。
操作结果:在图G中添加新顶点v。
⑦DeleteVex(&G, v)
初始条件:图G存在,v是G中某个顶点。
操作结果:删除G中顶点v及其相关的弧。
⑧InsertAcr(&G, v, w)
初始条件:图G存在,v和w是G中两个顶点。
操作结果:在G中增添弧<v, w>,若G是无向的,则还增添对称弧<w, v>。
⑨DeleteArc(&G, v, w)
初始条件:图G存在,v和w是G中两个顶点。
操纵结果:在G中删除弧<v, w>,若G是无向的,则还删除对称弧<w, v>。
⑩DFSTraverse(G, visit())
初始条件:图G存在,v是G中某个顶点,visit是顶点的应用函数。
操作结果:深度优先遍历图个G,并对每个顶点调用函数visit一次。一旦visit失败,则操作失败。
?BFSTraverse(G, visit())
初始条件:图G存在,visit是顶点的应用函数。
操作结果:广度优先遍历图G,并对每个顶点调用函数visit一次,一旦visit失败,则操作失败。
}
2.完全图:设n表示图中顶点个数,用e表示图中边或弧的数目,且不考虑图中每个顶点到其自身的边或弧。
(1)无向完全图:对于无向图而言,其边数e的取值范围是0~n(n-1)/2。称有n(n-1)/2条边(即图中每个顶点和其余n-1个顶点都有边相连)的无向图为无向完全图。
(2)有向完全图:对于有向图而言,其边数e的取值范围是0~n(n-1)。称有n(n-1)条弧(即图中每个顶点和其余n-1个顶点都有弧相连)的有向图为有向完全图。
3.稀疏图和稠密图:对于有很少条边的图(e < nlogn)称为稀疏图,反之称为稠密图。
4.子图:设图G = (V, {VR})和图G‘ = (V‘, {VR‘}),且V‘ ?V,VR‘ ? VR,则称G‘为G的子图。
5.邻接点:对于无向图G = (V, {E}),如果边(v, v‘) ∈ E,则称顶点v,v‘互为邻接点,即v,v‘相邻接。边(v, v‘)依附于顶点v和v‘,或者说边(v, v‘)与顶点v和v‘相关联。对于有向图G = (V, {A}),如果弧<v, v‘> ∈ A,则称顶点v邻接到顶点v‘,顶点v‘邻接自顶点v,或者说弧<v, v‘>与顶点v和v‘相关联。
6.度、入度和出度:对于无向图而言,顶点v的度是指和v相关联的边的数目,记作(v)。在有向图中,顶点v的度有出度和入度两部分,其中以顶点v为弧头的弧的数目称为该顶点的入度,记作ID(v),以顶点v为弧尾的弧的数目称为该顶点的出度,记作OD(v),则顶点v的度为TD(v) = ID(v) + OD(v)。
7.权与网:在一个图中,每条边上可以标上具有某种含义的数值,此数值称为该边的权,通常权为非负实数,可以表示从一个顶点到另一个顶点的距离或耗费等信息。边上带有权的图称为带权图,也常称作网。
8.路径与回路:无向图G = (V, {E})中从顶点v到v‘的路径是一个顶点序列(v = vi0, vi1, vi2, ... ,vin = v‘),其中(vij-1,vij) ∈ E,1 ≤ j ≤ n。如果图G是有向图,则路径也是有向的,顶点序列应满足<vij-1,vij> ∈ E,1 ≤ j ≤ n。路径的长度是指路径上经过的弧或边的数目。在一个路径中,若其第一个顶点和最后一个顶点是相同的,即v = v‘,则称该路径为回路或环。若表示路径的顶点序列中的顶点各不相同,则称这样的路径为简单路径。除了第一个和最后一个顶点外,其余各顶点均不重复出现的回路为简单回路。
9.连通图:在无向图G = (V, {E})中,若从vi到vj有路径相通,则称顶点vi与vj是连通的。如果对于图中的任意两个顶点vi、vj ∈ V,vi,vj都是连通的,则称该无向图G为连通图。在有向图G = (V, {A})中,若对于每对顶点vi,vj ∈ V且vi ≠ vj,从vi到vj和vj到vi都有路径,则称该有向图为强连通图。
10.连通分量:无向图中的极大连通子图称为该无向图的连通分量。任何连通图的连通分量只有一个,即其自身。非连通的无向图有多个连通分量。有向图的极大强连通子图称为G的强连通分量。强连通图只有一个强连通分量,即其自身。非强连通的有向图有多个强连通分量。
11.生成树:一个连通图的生成树是一个极小连通子图,它含有图中全部顶点,但是只有足以构成一棵树的n-1条边。如果在一棵生成树上添加一条边,必定构成一个环。如果一个图有n个顶点和小于n-1条边,则是非连通图,如果多于n-1条边则一定有环。
原文地址:https://www.cnblogs.com/hou36/p/9910357.html