图的存储、遍历及最小生成树

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图的存储、遍历及最小生成树

图的定义

图(Graph )是由一个用线或边连接在一起的顶点或节点的集合。是一种比线性表和树更为复杂的非线性数据结构,可称为图状结构或网状结构,前面讨论的线性表和树都可以看成是图的简单情况。

图G由两个集合V和E组成,记为:

G=(V,E)

其中:

V是顶点的有穷非空集合,

E是V中顶点偶对(称为边)的有穷集。

通常,也将图G的顶点集和边集分别记为V(G)和E(G)。E(G)可以是空集。若E(G)为空,则图G只有顶点而没有边。

有向图和无向图

1.有向图

如图7.1 G2所示每条边都是有方向的,则称G为有向图(Digraph)。

(1)有向边的表示

有向边又称为弧,通常用尖括弧表示一条有向边, 表示从顶点v 到w 的一段弧,v 称为边的始点( 或尾顶点) ,w 称为边的终点,( 或头顶点), 代表两条不同的弧。

【例】表示一条有向边,vi是边的始点(起点),vj是边的终点。

注意: 是两条不同的有向边。

(2)有向图的表示

【例】上面7.1图中G2是一个有向图。图中边的方向是用从始点指向终点的箭头表示的,该图的顶点集和边集分别为:

顶点集V={v 1 ,v 2 ,v 3 }

弧集E={< v 1 ,v 2 >,,< v 2 ,v 3 >,} 。

注意:

表示两条不同的边。

2.无向图

如图7.1G1中所示的每条边都是没有方向的,则称G为无向图(Undigraph)。

(1)无向边的表示

通常用圆括号表示无向边,(v,w) 表示顶点v 和w 间相连的边。在无向图中(v,w) 和(w,v) 表示同一条边,如果顶点v,w 之间有边(v,w) ,则v,w 互称为邻接点。

【例】无序对(vi,vj)和(vj,vi)表示同一条边。

(2)无向图的表示

【例】上面7.1图中的G1是无向图,它们的顶点集和边集分别为:

顶点集:V={v 1 ,v 2 ,v 3 ,v 4 }

边集:E={(v 1 ,v 2 ), (v 1 ,v 3 ), (v 1 ,v 4 ), (v 2 ,v 3 ), (v 3 ,v 4 )}

注意:

(v 2 ,v 1 ) 与(v 1 ,v 2 )表示同一条边,(v 2 ,v 3 ) 与(v 3 ,v 2 ) 也表示同一条边,等等。3.图G的顶点数n和边数e的关系

(1)若G是无向图,则0≤e≤n(n-1)/2

恰有n(n-1)/2条边的无向图称无向完全图(Undireet-ed Complete Graph)

(2)若G是有向图,则0≤e≤n(n-1)。

恰有n(n-1)条边的有向图称为有向完全图(Directed Complete Graph)。

注意:

完全图具有最多的边数。任意一对顶点间均有边相连。

4.对图的讨论中我们对图作一些限制:

第一,图中不能有从顶点自身到自身的边(即自身环),就是说不应有形如(vx,vx)的边或 的弧。

第二,两个顶点vt和vu之相关联的边不能多于一条。

图的邻接矩阵

1.图的邻接矩阵表示法

在图的邻接矩阵表示法中:

①用邻接矩阵表示顶点间的相邻关系

②用一个顺序表来存储顶点信息

2.图的邻接矩阵(Adacency Matrix)

设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下性质的n阶方阵:

【例】下图中无向图G5和有向图G6的邻接矩阵分别为Al和A2。

从图的邻接矩阵表示法中可以得到如下结论:

(1)对于n个顶点的无向图,有A(i,i)=0,1≤i≤n。

(2)无向图的邻接矩阵是对称的,即A(i,j)=A(j,i),1≤i≤n,1≤j≤n。

(3)有向图的邻接矩阵不一定对称的。因此用邻接矩阵来表示一个具有n个顶点的有向图时需要n2个单位来存储邻接矩阵;对有n个顶点的无向图则需存入上(下)三角形,故只需n(n+1)/2个单位。

(4)无向图的邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的度TD(vi)。(5)有向图的邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的出度OD (vi)[或入度ID(vi)]。

3.网(带权值的图)的邻接矩阵

若G是网络,则邻接矩阵可定义为:

其中:

wij表示边上的权值;

∞表示一个计算机允许的、大于所有边上权值的数。

【例】下面(a)是一个带权图,(b)是对应的邻接矩阵的存储结构

(a)带权图(b)邻接矩阵

4.邻接矩阵的图类

const int MaxVertices=10;

const int MaxWeight=32767;

class AdjMWGraph

{ private:

int Vertices[10]; //顶点信息的数组

int Edge[MaxVertices][MaxVertices]; //边的权值信息的矩阵

int numE; //当前的边数

int numV; //当前的顶点数

public: ………;//公有函数

private: ………;//私有函数

}

注意:

①在简单应用中,可直接用二维数组作为图的邻接矩阵(顶点表及顶点数等均可省略)。

②当邻接矩阵中的元素仅表示相应的边是否存在时,EdgeTyPe可定义为值为0和1的枚举类型。

③无向图的邻接矩阵是对称矩阵,对规模特大的邻接矩阵可压缩存储。

④邻接矩阵表示法的空间复杂度S(n)=0(n2)。

相关文档
最新文档