【笔记】图的基础知识
图是一种比线性表、树更为复杂的数据结构。图是一种非线性的数据结构,图中的数据元素之间的关系是多对多的关系。
1.图的定义
图是由数据元素集合V与边的集合E构成的。在图中,数据元素通常称为顶点。其中,顶点集合V不能为空,边表示顶点之间的关系。
若
若
图的形式化定义为G=(V,E),其中,
注:有向图的边称为弧,无向图的边称为边。图中顶点的顺序可以是任意的,任何一个顶点都可以作为图的第一个顶点。
2.图的相关概念
- 邻接点
对于无向图G=(V,E),若边
无向图
- 顶点的度
对于无向图,顶点v的度是指与v相关联的边的数目,记作TD(v)。对于有向图,以顶点v为弧头的数目称为顶点v的入度,记作ID(v)。以顶点v为弧尾的数目称为v的出度,记作OD(v)。顶点v的度为TD(v)=ID(v)+OD(v)。
若图的顶点个数为n,边数和弧数为e,顶点
- 路径
无向图G中,从顶点v到顶点v’的路径是从v出发,经过一系列的顶点序列到达顶点v’。如果G是有向图,则路径也是有向的,路径的长度是路径上弧或者边的数目。第一个顶点和最后一个顶点相同的路径称为回路或环。序列中顶点不重复出现的路径称为简单回路或简单环。
- 子图
假设存在两个图
- 连通图和强连通图
对于无向图G,如果从顶点
对于有向图G,如果对每一对顶点
- 完全图
若图的顶点数目是n,图的边(弧)的数目是e。若不存在顶点到自身的边或弧,即若存在
- 稀疏图和稠密图
具有
- 生成树
一个连通图的生成树是一个极小连通子图,它含有图的全部顶点,但只有足以构成一棵树的n-1条边。如果在该生成树中添加一条边,则一定会在图中出现一个环。一棵具有n个顶点的生成树仅有n-1条边,如果少于n-1条边,在该图是非连通的;多于n-1条边,则一定有环出现。反过来,具有n-1条边的图不一定能构成生成树。一个图的生成树不一定是唯一的。
- 网
在图的边或弧上,有时标有与它们相关的数,这种与图的边或弧相关的数称作权。这些权可以表示从一个顶点到另一个顶点的距离或代价。这种带权的图称为网。
3.图的抽象数据类型
数据对象集合
图的数据对象为图的各个顶点和边的集合。图中的顶点是没有先后次序的。图分为有向图和无向图,图中结点之间的关系用弧或者边表示,通过弧或边相连的顶点相邻接或相关联。
图中顶点之间是多对多的关系,即任何一个顶点可以有与之邻接或关联的顶点。
基本操作集合
(1)CreateGraph(&G):创建图。
(2)DestroyGraph(&T):销毁图。
(3)LocateVertex(G,v):返回顶点v在图中的位置。
(4)GetVertex(G,i):返回图G中序号i对应的值。
(5)FirstAdjVertex(G,v):返回v的第一个邻接顶点。
(6)NextAdjVertex(G,v,w):返回v的下一个邻接顶点。
(7)InsertVertex(&G,v):图的顶点插入操作。
(8)DeleteVertex(&G,v):图的顶点删除操作。
(9)InsertArc(&G,v,w):图的弧插入操作。
(10)DeleteArc(&G,v,w):图的弧删除操作。
(11)DFSTraverseGraph(G):图的深度优先遍历操作。
(12)BFSTraverseGraph(G):图的广度优先遍历操作。