文档介绍:数据结构与算法
-5
图的基本概念
图的存储表示
图的遍历与连通性
最小生成树
最短路径
活动网络(AOV)
图
图的基本概念
图定义图是由顶点集合(vertex)及顶点间的关系集合组成的一种数据结构:
Graph=( V, E )
其中 V = { x | x 某个数据对象}
是顶点的有穷非空集合;
E = {(x, y) | x, y V }
或 E = {<x, y> | x, y V && Path (x, y)}
是顶点之间关系的有穷集合,也叫做边(edge)集合。Path (x, y)表示从 x 到 y 的一条单向通路, 它是有方向的。
有向图与无向图在有向图中,顶点对<x, y>是有序的。在无向图中,顶点对(x, y)是无序的。
完全图若有 n 个顶点的无向图有 n(n-1)/2 条边, 则此图为完全无向图。有 n 个顶点的有向图有n(n-1) 条边, 则此图为完全有向图。
邻接顶点如果(u, v) 是 E(G) 中的一条边,则称 u 与 v 互为邻接顶点。
权某些图的边具有与它相关的数, 称之为权。这种带权图叫做网络。
子图设有两个图 G=(V, E) 和 G‘=(V’, E‘)。若 V’ V 且 E‘E, 则称图G’是图G 的子图。
顶点的度一个顶点v的度是与它相关联的边的条数。记作TD(v)。在有向图中, 顶点的度等于该顶点的入度与出度之和。
顶点 v 的入度是以 v 为终点的有向边的条数, 记作 ID(v); 顶点 v 的出度是以 v 为始点的有向边的条数, 记作 OD(v)。
路径在图 G=(V, E) 中, 若从顶点 vi 出发, 沿一些边经过一些顶点 vp1, vp2, …, vpm,到达顶点vj。则称顶点序列( vi vp1 vp2 ... vpm vj ) 为从顶点vi 到顶点 vj 的路径。它经过的边(vi, vp1)、(vp1, vp2)、...、(vpm, vj)应是属于E的边。
路径长度
非带权图的路径长度是指此路径上边的条数。
带权图的路径长度是指路径上各边的权之和。
简单路径若路径上各顶点 v1,v2,...,vm 均不互相重复, 则称这样的路径为简单路径。
回路若路径上第一个顶点 v1 与最后一个顶点vm 重合, 则称这样的路径为回路或环。
连通图与连通分量在无向图中, 若从顶点v1到顶点v2有路径, 则称顶点v1与v2是连通的。如果图中任意一对顶点都是连通的, 则称此图是连通图。非连通图的极大连通子图叫做连通分量。
强连通图与强连通分量在有向图中, 若对于每一对顶点vi和vj, 都存在一条从vi到vj和从vj到vi的路径, 则称此图是强连通图。非强连通图的极大强连通子图叫做强连通分量。
生成树一个连通图的生成树是它的极小连通子图,在n个顶点的情形下,有n-1条边。但有向图则可能得到它的由若干有向树组成的生成森林。
本课程不
讨论的图
图的抽象数据类型
class Graph {
public:
Graph ( );
void InsertVertex ( Type & vertex );
void InsertEdge
( int v1, int v2, int weight );
void RemoveVertex ( int v );
void RemoveEdge ( int v1, int v2 );
int IsEmpty ( );
Type GetWeight ( int v1, int v2 );
int GetFirstNeighbor ( int v );
int GetNextNeighbor ( int v1, int v2 );
}
图的存储表示
在图的邻接矩阵表示中,有一个记录各个顶点信息的顶点表,还有一个表示各个顶点之间关系的邻接矩阵。
设图 A = (V, E)是一个有 n 个顶点的图,则图的邻接矩阵是一个二维数组 [n][n],定义:
无向图的邻接矩阵是对称的,有向图的邻接矩阵可能是不对称的。
邻接矩阵(Adjacency Matrix)