图基本概念

来源:互联网 发布:人人聚财网络贷款 编辑:程序博客网 时间:2024/05/29 05:55
1 图的基本概念

  图 (G)是一种比线性表和树结构更复杂的数据结构,是非线性的数据结构,应用非常广泛。

  图:图G由两个集合V(G)和E(G)组成,记为:G=(V,E)。其中,V(G)是顶点的非空有限集合,E(G)是边的有限集合,边是顶点的无序对或有序对。

  有向图:若E(G)是有向边(也称为弧)的有限集合时,则为有向图。弧是顶点的有序对,记为,其中V、W是顶点,V称为弧尾,W称为弧头。我们说是从顶点V到顶点W的弧,也可说顶点W和顶点V相邻,或V邻接W。

  

 

  无向图:若E(G)是无向边(简称边)的有限集合时,则为无向图。边是顶点的无序对,记为(V,W)或(W,V),因为(V,W)=(W,V),其中V、W是顶点。我们说(V,W)是V邻接W,或W邻接V。

  例:有向图G 1 和无向图G 2

  

图基本概念

 

  图G 1 有

  V(G 1 )={1,2,3,4,5,6}

  E(G 1)={<1,2>,<2,1>,<2,3>,<2,4>,<3,5>,<5,6>,<6,3>}

  图G 2 有

  V(G 2 )={1,2,3,4,5,6,7}

  E(G 2 )={(1,2),(2,3),(3,1),(2,4),(2,5),(5,6),(5,7)}

  完备图无向图:对一个有n个顶点的无向图,若每个顶点到其它(n-1)个顶点都连有一条边,则图中共有n(n-1)/2条边。

  完备图有向图 :对一个有n个顶点的有向图,若任何两顶点都有方向相反的两条弧连接,则图中共有n(n-1)条弧。

  权 :若图上的每条边有一相应的数值,这个数值就叫该边的权。这种图一般叫做网络。

  路径 :在一个图中,若从顶点V 1 出发,沿一些边经过顶点V 2 ,V 3 ,...,V n-1 到达顶点V n,则成顶点序列(V 1 ,V 2 ,...,V n-1 ,V n )为从V 1 到V n的路径。对于有向图,路径也是有向的,路径的方向是由起点到终点且需与它经过的每条边的方向一致。

  路径长度 :沿此路径上边的数目为路径长度;对有权的图,一般取沿路径各边的权之和作为此路径的长度。

  简单路径 :如果一条路径上的所有顶点,出起始顶点和终止顶点外,都是彼此不同的,则可说该路径是一条简单路径。

  简单回路 :如果一条简单路径,其长度 3 2,且路径起始和结束在同一顶点上,则说该路径是一个简单路径。

  单向连通 :若从顶点V到顶点W有一条路径,则说V到W是单向连通,或称连通的。

  连通图 :如果图G中任意两个顶点都是连通的,则说G是一个连通图。非连通图的每一个连通部分叫连通分量。

  强连通图 :对于有向图,若从顶点V i 到顶点V j 和从顶点V j 到顶点V i之间都有路径,则称这两个顶点是强连通的。若图中任何一对顶点都是强连通的,则称此图为强连通图。非强连通图的每一个强连通部分叫强连通分量。

  

 

  度:与每个顶点相连的边数,称为该顶点的度。对于有向图,顶点的度有入度和出度之区别,以顶点V为头的弧的数目称为V的入度,以顶点V为尾的弧的数目称为V的出度。

  子图 :设G=(V,E)和G'=(V',E')是两个有向图,如果有V' ì V,E' ì E,则说G'是G的子图。

  

 

  图的基本运算 :

  LOCVERTEX(G,V):确定顶点V在图G中的位置;

  GETVERTEX(G,i):求图G中第i个顶点;

  FIRSTADJ(G,V):求图G中顶点V的第一个邻接点。若V在G中无邻接点,则运算结果为“零”或“NIL”;

  NEXTADJ(G,V,W):其中W为图G中顶点V的邻接点,求顶点V的下一个邻接点;

  ADDVERTEX(G,U):在G中增加一个顶点U,则U是图G的第n+1个顶点,其中n为图中原有顶点的个数;

  ADDARC(G,V,W)或ADDEDGE(G,V,W):在图中增加一条从顶点V到顶点W的弧或顶点V和顶点W之间的一条边;

  DELVERTEX(G,V):在图G中删去顶点V以及所有与V相关联的边或弧;

  DELARC(G,V,W)或DELEDGE(G,V,W):从图G中删去一条从顶点V到顶点W的弧或顶点V和顶点W之间的一条边。

  2 图的存储方法

  2.1 关联矩阵

  关联矩阵的每行对应图的一个顶点,每列对应图的一条边,(n*e)阶矩阵。缺点是浪费内存。

  

 

  2.2 邻接矩阵

  邻接矩阵表示各顶点间的邻接关系,每行对应图的一个顶点,每列也对应图的一个顶点,是一个(n*n)阶矩阵。两顶点有边相连就说是两点相邻接。邻接矩阵的元素规定如下:

  

 

  例,对图

  

 

  G1、G2图的邻接矩阵分别为:

  

 

  2.3 邻接表

  邻接表是图的一种链式存储结构,它是由邻接矩阵改进而来的,其特点是只考虑非零元素,因而节省了存储空间。

  

 

  为方便计算入度,构造逆邻接表

  

 

  2.4 十字链表

  十字链表是有向图的一种链式存储结构,可以看成是将有向图的邻接表和逆邻接表结合起来得到的一种链表。

  

 

  3 图的遍历

  和树的遍历类似,图的遍历是从图中某一顶点出发,访问图中其余顶点,且使每一顶点仅被访问一次。常用图的遍历方法:深度优先搜索遍历 和 广度优先搜索遍历 。辅助数组,

  

 

  3.1 深度优先搜索遍历

  深度优先搜索遍历类似于树的先序遍历,是树的先序遍历的推广。

  

 

  一种遍历过程:

  

 

  

 

  

 

  

 

  DFS遍历结果:1,2,4,8,5,6,3,7

  如果访问顶点V1后,接着访问顶点V3,...可以得到另一遍历结果:1,3,7,8,6,5,2,4

  

 

  3.2 广度优先搜索遍历

  广度优先搜索遍历类似于树的按层次遍历。

  对上图,按广度优先的一种遍历过程:

  

 

  

 

  

 

  

 

  BFS遍历结果:1,2,3,4,5,6,7,8

  也可以得到其它遍历结果,如:1,3,2,7,6,5,4,8

  广度优先搜索方法不是递归过程,运算时需借助一个队列,同时也使用一个辅助数组visited[n]来标记顶点的访问情况。