大话数据结构读书笔记——第七章 图

来源:互联网 发布:上海一姐张弦淘宝店 编辑:程序博客网 时间:2024/06/06 15:42

一、图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中G表示一个图,V是图G中的顶点(Vertex,树中称作结点)的集合,E是图G中边的集合。

图的边分为无向边和有向边,对于有向边(也称作弧Arc),用有序偶<Vi, Vj>表示,Vi称为弧尾(Tail),Vj称为弧头(Head)。无向边用小括号“()”表示,而有向边用尖括号“<>"表示。

与图的边或弧相关的数叫做权(Weight),带权的图通常称为网(Network)。

对于无向图,顶点V的度(Degree)是和V相关联的边的数目,记为TD(V)。

对于有向图,以顶点V为头的弧的数目称为V的入度(InDegree),记为ID(V);以V为尾的弧的数目称为V的出度(OutDegree),记为OD(V);顶点V的度为TD(V)=ID(V)+OD(V)。

无向图G中从顶点V到顶点V‘的路径(Path)是一个顶点序列。路径的长度是路径上的边或弧的数目。

第一个顶点到最后一个顶点相同的路径称为回路或环(Cycle)。序列中顶点不重复出现的路径称为简单路径。除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路或简单环。

在无向图G中,如果从顶点V到顶点V'有路径,则称V和V'是连通的。如果对于图中任意两个顶点Vi、Vj都是连通的,则称G是连通图(Connected Graph)。无向图中的极大连通子图称为连通分量。

在有向图G中,如果对于每一对Vi != Vj,从Vi到Vj和从Vj到Vi都存在路径,则称G是强连通图。有向图中的极大强连通子图称做有向图的强连通分量。

一个连通图的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但足以构成一棵树的n-1条边。

如果一个有向图恰有一个顶点的入度为0,其余顶点的入度均为1,则是一棵有向树。

二、图的存储结构

邻接矩阵(Adjacency Matrix):用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

邻接表(Adjacency List):数组与链表相结合的存储方法称为邻接表,解决邻接矩阵浪费存储空间的问题。

十字链表(Orthogonal List):结合邻接表与逆邻接表。

邻接多重表:方便无向图的边操作。

边集数组:两个一维数组构成。一个存储顶点信息;一个存储边的信息,这个边数组每个数据元素由一条边的起点下标、终点下标和权组成。

三、图的遍历

从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(Traversing Graph)。

1. 深度优先遍历(Depth First Search,DFS)

2. 广度优先遍历(Breadth First Search,BFS)

0 0
原创粉丝点击