首页 > 技术文章 > 数据结构-图

blancheiii 2018-11-05 22:06 原文

一、图的基本概念

   (Graph)是由顶点的有穷非空集合顶点之间边的集合组成。表示方式为:G(V,E),其G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

注意:在图中可以没有边但不允许没有顶点。


基本术语:

无向边:若顶点Vi和Vj之间的边没有方向,称这条边为无向边(Edge),用(Vi,Vj)来表示。

无向图(Undirected graphs):图中任意两个顶点的边都是无向边。

有向边:若从顶点Vi到Vj的边有方向,称这条边为有向边,也称为弧(Arc),用<Vi, Vj>来表示,其中Vi称为弧尾(Tail),Vj称为弧头(Head)。

有向图(Directed graphs):图中任意两个顶点的边都是有向边。

简单图:不存在自环(顶点到其自身的边)和重边(完全相同的边)的图。

无向完全图:无向图中,任意两个顶点之间都存在边。

有向完全图:有向图中,任意两个顶点之间都存在方向相反的两条弧。

度:与特定顶点相连接的边数。

出度、入度:有向图中的概念,出度表示以此顶点为起点的边的数目,入度表示以此顶点为终点的边的数目。

稀疏图;有很少条边或弧的图称为稀疏图,反之称为稠密图。

权(Weight):表示从图中一个顶点到另一个顶点的距离或耗费。

网:带有权重的图。

环:第一个顶点和最后一个顶点相同的路径。

简单环:除去第一个顶点和最后一个顶点后没有重复顶点的环。

连通图:任意两个顶点都相互连通的图。

极大连通子图:包含竟可能多的顶点(必须是连通的),即找不到另外一个顶点,使得此顶点能够连接到此极大连通子图的任意一个顶点。

连通分量:极大连通子图的数量。

强连通图:此为有向图的概念,表示任意两个顶点a,b,使得a能够连接到b,b也能连接到a 的图。

生成树:n个顶点,n-1条边,并且保证n个顶点相互连通(不存在环)。

最小生成树:此生成树的边的权重之和是所有生成树中最小的。

AOV网( Activity On Vertex Network ):在有向图中若以顶点表示活动,有向边表示活动之间的先后关系。

AOE网( Activity On Edge Network):在带权有向图中若以顶点表示事件,有向边表示活动,边上的权值表示该活动持续的时间。


二、图的存储结构

原因:图是一种多对多的数据结构,因此用简单的顺序存储来表示图是不可能。这里常用的分别是邻接矩阵、邻接表、

(1)邻接矩阵

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

 

无向图由于边不区分方向,所以其邻接矩阵是一个对称矩阵。邻接矩阵中的0表示边不存在,主对角线全为0表示图中不存在自环。

带权有向图的邻接矩阵:

(2)邻接表

  邻接表是一种将数组与链表相结合的存储方法。其具体实现为:将图中顶点用一个一维数组存储,每个顶点Vi的所有邻接点用一个单链表来存储。
对于有向图其邻接表结构如下:

无向图其邻接表结构如下:

 

推荐阅读