最新图的定义和基本术语图的存储结构图的遍历生成树最短路径幻灯片.ppt
《最新图的定义和基本术语图的存储结构图的遍历生成树最短路径幻灯片.ppt》由会员分享,可在线阅读,更多相关《最新图的定义和基本术语图的存储结构图的遍历生成树最短路径幻灯片.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一一 、图的定义、图的定义 本章介绍另一种非线性数据结构 图, 主要学习图的存储结构以及若干图的操作的实现。 图是一种多对多的结构关系,每个元素可以图是一种多对多的结构关系,每个元素可以有零个或多个直接前趋;零个或多个直接后继。有零个或多个直接前趋;零个或多个直接后继。 图图G由两个集合构成,记作由两个集合构成,记作G= (V, A) 其中其中V是顶点的非空有限集合,是顶点的非空有限集合, A 是边的有限是边的有限集合,其中边是顶点的无序对或有序对集合,其中边是顶点的无序对或有序对(此时此时的图称为的图称为无向图无向图或或有向图有向图) )。DFSTraverse(G, v, Visit()
2、/深度优先遍历 初始条件初始条件: :图图G存在,存在,v 是是G中某个顶点,中某个顶点, Visit是顶点的应用函数是顶点的应用函数 。 操作结果操作结果: : 从顶点从顶点v起深度优先遍历图起深度优先遍历图G,并对每,并对每 个顶点调用函数个顶点调用函数Visit一次且仅一次。一次且仅一次。 一旦一旦Visit()失败,则操作失败。()失败,则操作失败。BFSTraverse(G, v, Visit() /广度优先遍历 初始条件初始条件: :图图G存在,存在,v 是是G中某个顶点,中某个顶点, Visit是顶点的应用函数是顶点的应用函数 。 操作结果操作结果: : 从顶点从顶点v起广度优先
3、遍历图起广度优先遍历图G,并对每,并对每 个顶点调用函数个顶点调用函数Visit一次且仅一次。一次且仅一次。 一旦一旦Visit()失败,则操作失败。()失败,则操作失败。2 顶点的度、入度、出度顶点的度、入度、出度 顶点顶点v的度的度 TD(v)= 与与v相关联的边的数目。相关联的边的数目。 在有向图中在有向图中:顶点:顶点v的出度的出度OD(v) =以以v为起点有向边数;为起点有向边数; 顶点顶点v的入度的入度ID(v) =以以v为终点有向边数;为终点有向边数; TD(v) = OD(v) + ID(v) V0 V4 V3 V1 V2 V0 V1 V2 V3二、图的基本术语二、图的基本术语
4、1 邻接点及关联边邻接点及关联边 邻接点:边的两个顶点;邻接点:边的两个顶点; 关联边:若边关联边:若边e= (v, u), 则称边则称边e与顶点与顶点 v和和u 相关联;相关联;设图设图G的顶点数为的顶点数为n,边数为,边数为e则图的所有顶点的度数之和则图的所有顶点的度数之和 = 2*e (每条边对图的所有顶点的度数之和(每条边对图的所有顶点的度数之和 “贡献贡献” 2度)度) 无向图无向图G1有向图有向图G2 V0 V4 V3 V1 V2 V0 V1 V2 V3 路径、回路路径、回路(环)无向图无向图G1=(V1,E1)中的顶点序列)中的顶点序列v1,v2, ,vk,若若(vi,vi+1)
5、 E1 ( i=1,2,k-1), v =v1, u =vk, 则称该则称该序列是从顶点序列是从顶点v到顶点到顶点u的路径;若的路径;若v=u,则称该,则称该序列为回路;在序列为回路;在G1中,中,v0,v1,v2,v3 是是v0到到v3的路径的路径; v0,v1,v2,v3 , v0是回路;是回路;有向图有向图G2=(V2,E2)中的顶点序列)中的顶点序列v1,v2, ,vk, E2 (i=1,2,k-1),若若v =v1, u =vk,则称该则称该序列是从顶点序列是从顶点v到顶点到顶点u的路径;若的路径;若v=u,则称该,则称该序序列为回路;在列为回路;在G2中,中,v0, v2, v3是
6、是v0到到v3的路径的路径v0,v2,v3,v0是回路;是回路; 简单路径和简单回路简单路径和简单回路 在一条路径中在一条路径中, ,若所有顶点各不相若所有顶点各不相同同, ,则称该路径为简单路径;若除起点和终则称该路径为简单路径;若除起点和终点外点外, , 其余顶点各不相同的回路称为简单回路其余顶点各不相同的回路称为简单回路。 例例有向图有向图G2无向图无向图G1 V0 V4 V3 V1 V2 V0 V1 V2 V3在在图图G1中,中,V0,V1,V2,V3 是简单路径;是简单路径; V0,V1,V2,V4,V1不是简单路径;不是简单路径; 在在图图G2中,中,V0,V2,V3,V0是简单回
7、路;是简单回路; 连通图(强连通图)连通图(强连通图) 在无(有)向图在无(有)向图G=( V, E )中,若对任何中,若对任何两个顶点两个顶点 v、u 都存在从都存在从v 到到 u 的路径,则称的路径,则称G是连通图(强连通图)是连通图(强连通图) 非连通图非连通图 连通图连通图 强连通图强连通图 V0 V1 V2 V3 V0 V4 V3 V1 V2 V0 V1 V2 V3 V0 V2 V3 V1 V5 V4 非强连通图非强连通图设有两个图设有两个图G=(V,E)、)、G1= (V1,E1),),若若V1 V,E1 E,E1关联的顶点都在关联的顶点都在V1中,中,则称则称 G1是是G的子图;
8、的子图; (a)(b)(c) V0 V4 V3 V1 V2 V0 V4 V3 V1 V2 V0 V4 V3 V1 V25 子图子图例 下列 (b)、(c) 是 (a) 的子图 (强)连通分量连通分量 无向图无向图G的的极大连通子图极大连通子图称为称为G的连通分量。的连通分量。 极大连通子图意思是:该子图是极大连通子图意思是:该子图是 G 连通子图,将连通子图,将G 的任何不在该子图中的顶点加入,子图不再连通;的任何不在该子图中的顶点加入,子图不再连通; 连通分量连通分量非连通图非连通图 V0 V2 V3 V1 V5 V4 V0 V2 V1非连通分量非连通分量有向图有向图D 的极大强连通子图的极
9、大强连通子图称为称为D 的强连通的强连通分量。极大强连通子图意思是:该子图是分量。极大强连通子图意思是:该子图是D强连通子图,将强连通子图,将D的任何不在该子图中的顶的任何不在该子图中的顶点加入,子图不再是强连通的。点加入,子图不再是强连通的。强连通分量强连通分量 V0 V1 V2 V3 V0 V2 V3 V1非强连通图非强连通图7 生成树生成树 包含包含无向图无向图G 所有顶点所有顶点的的极小连通子图极小连通子图称为称为G 的的生成树。极小连通子图意思是:该子图是生成树。极小连通子图意思是:该子图是G 的连通子的连通子图,在该子图中删除任何一条边,子图不再连通。图,在该子图中删除任何一条边,
10、子图不再连通。 G的生成树的生成树 V0 V4 V3 V1 V2连通图连通图 G V0 V4 V3 V1 V2 V0 V4 V3 V1 V2若若T是是G 的生成树当且仅当的生成树当且仅当T 满足如下条件:满足如下条件: T是是G 的连通子图;的连通子图; T包含包含G 的所有顶点;的所有顶点; T中无回路。中无回路。一棵一棵n n个顶点的生成树有且仅有足以构成树个顶点的生成树有且仅有足以构成树的的n-1n-1条边。条边。说明:说明:G的生成树的生成树 V0 V4 V3 V1 V2连通图连通图 G V0 V4 V3 V1 V2 V0 V4 V3 V1 V2若在一棵生成树上删除一条边,就不再连通。
11、若在一棵生成树上删除一条边,就不再连通。 若在一棵生成树上添加一条边,必定构成一若在一棵生成树上添加一条边,必定构成一个环。个环。 不再连通不再连通构成环构成环 由于图中任意两个顶点之间都可能存在联由于图中任意两个顶点之间都可能存在联系,因此难以以数据元素在存储区中物理位置系,因此难以以数据元素在存储区中物理位置表示它们间的关系,仍可以借助数组表示之。表示它们间的关系,仍可以借助数组表示之。 另一方面,用也可以多重链表示图。但由另一方面,用也可以多重链表示图。但由于图中顶点的度可能相差悬殊,会因此造成空于图中顶点的度可能相差悬殊,会因此造成空间的浪费;反之,若按每个顶点的度设计不同间的浪费;反
12、之,若按每个顶点的度设计不同的结点结构,又会造成操作上的不便。的结点结构,又会造成操作上的不便。 应根据具体的图和需要,设计恰当的结应根据具体的图和需要,设计恰当的结点结构和表结构。点结构和表结构。图的存储结构图的存储结构至少要保存两类信息:至少要保存两类信息: 1)1)顶点的数据;顶点的数据; 2)2)顶点间的关系顶点间的关系。 如何表示顶点间的关系? V0 V4 V3 V1 V2 V0 V1 V2 V3常用图的存储表示常用图的存储表示一、图的数组一、图的数组(邻接矩阵)存储表示存储表示二、图的邻接表存储表示二、图的邻接表存储表示三、有向图的十字链表存储表示三、有向图的十字链表存储表示 四、
13、无向图的邻接多重表存储表示四、无向图的邻接多重表存储表示邻接矩阵邻接矩阵:G的邻接矩阵是满足如下条件的的邻接矩阵是满足如下条件的n阶矩阵:阶矩阵: Aij=1 若若(vi,vj) E 或或 E0 否则否则0 1 0 1 00 1 0 1 00 1 0 10 1 0 10 1 0 1 10 1 0 1 10 1 0 00 1 0 01 10 1 1 0 00 1 1 0 00 1 1 00 1 1 00 0 0 00 0 0 00 0 0 10 0 0 11 10 0 00 0 0 V0 V4 V3 V1 V2 V0 V1 V2 V3一、数组表示法一、数组表示法( (邻接矩阵表示邻接矩阵表示)
14、)在数组表示法中,在数组表示法中,用邻接矩阵表示顶点间的关系用邻接矩阵表示顶点间的关系typedef struct ArcCell / 弧的定义 VRType adj;/VRType是顶点关系类型。对无权图, /用1或0表示相邻否;对带权图,则为权值类型。 InfoType *info; / 该弧相关信息的指针 ArcCell , AdjMatrixMAX_VERTEX_NUM MAX_VERTEX_NUM; / 图的数组图的数组(邻接矩阵邻接矩阵)存储表示存储表示#define INFINITY INT_MAX /最大值#define MAX_VERTEX_NUM 20/最大顶点个数type
15、def enumDG,DN,UDG, UDN graphkind; /有向图,有向网,无向图,无向网typedef struct /图的定义 VertexType vexsMAX_VERTEX_NUM; /顶点向量保存顶点数据 AdjMatrix arcs; /邻接矩阵保存顶点间关系 int vexnum, arcnum; /顶点数,弧数 GraphKind kind; /图的种类标志 MGraph;无向图数组表示法特点:无向图数组表示法特点:1)无向图邻接矩阵是对称矩阵,同一条边表示了两次;)无向图邻接矩阵是对称矩阵,同一条边表示了两次;0 1 0 1 00 1 0 1 00 1 0 10
16、1 0 10 1 0 1 10 1 0 1 10 1 0 00 1 0 01 10 1 1 0 00 1 1 0 0对对有向图有向图的数组表示法的数组表示法可做类似的讨论可做类似的讨论 V0 V4 V3 V1 V22)顶点)顶点v的度:等于二维数组对应行(或列)中的度:等于二维数组对应行(或列)中1的个数;的个数;3)判断两顶点)判断两顶点v、u是否为邻接点:只需判二维数组对应是否为邻接点:只需判二维数组对应分量是否非零;分量是否非零;4)顶点不变,在图中)顶点不变,在图中增加增加、删除删除边:只需对二维数组对边:只需对二维数组对应分量应分量赋非零值赋非零值或或清零清零;5)用二维数组存储顶点
17、数为)用二维数组存储顶点数为 n的图的图, 占用存储空间只与它占用存储空间只与它的顶点数的顶点数n有关,与边数有关,与边数e无关。适用于边稠密的图。无关。适用于边稠密的图。 图的基本操作的实现图的基本操作的实现(采用数组表示法):1)求无向图某顶点)求无向图某顶点vi的度:的度:(或有向图或有向图vi的出度的出度) Ai0 到到Ain-1中的非零个数,即数组中的非零个数,即数组A第第i行的行的非零元素的个数;非零元素的个数;0 1 0 1 00 1 0 1 00 1 0 10 1 0 10 1 0 1 10 1 0 1 10 1 0 00 1 0 01 10 1 1 0 00 1 1 0 0
18、V0 V4 V3 V1 V2 V0 V1 V2 V30 1 1 00 1 1 00 0 0 00 0 0 00 0 0 10 0 0 11 10 0 00 0 02)求有向图某顶点)求有向图某顶点vi 的的 入度:入度:A0i到到An-1i 中中的非零个数,即数组的非零个数,即数组A中第中第i列的非零元素的个数;列的非零元素的个数;3)求图中的总边数:扫描整个数组)求图中的总边数:扫描整个数组A,统计出数组,统计出数组中非零元素的个数。无向图的总边数为非零元素个中非零元素的个数。无向图的总边数为非零元素个数的一半,而有向图的总弧数为非零元素个数。数的一半,而有向图的总弧数为非零元素个数。图的构
19、造操作的实现图的构造操作的实现(采用数组表示法)Status CreateGraph(Mgraph &G) /采用数组表示法, 构造图G scanf(&G.kind); switch(G.kind) case DG: return CreateDG(G); /构造有向图G case DN: return CreateDN(G); /构造有向网G case UDG: return CreateUDG(G);/构造无向图G case UDN: return CreateUDN(G);/构造无向网G default : return ERROR; / CreateGraph无向网的构造算法无向网的构
20、造算法Status CreateUDN(Mgraph &G) /采用数组表示法, 构造无向网G scanf(&G.vexnum, &G.arcnum , &IncInfo); /IncInfo为0则各不含其它信息 for(i=0;i G.vexnum;+i) scanf(G.vexsi); /构造顶点向量 for(i=0;i G.vexnum;+i) /初始化邻接矩阵 for(j=0;j G.vexnum;+j) G.arcsij=INFINITY,NULL; for(k=0;k G.arcnum;+k) /构造邻接矩阵 scanf(&v1, &v2, &w); /输入一条边依附的顶点及权值
21、i=LocateVex(G,v1); j=LocateVex(G,v2); /确定v1和v2在G中位置 G.arcsij.adj=w; /弧的权值 if (IncInfo) input(* G.arcsij.info) /若弧含有相关信息,则输入 G.arcsji= G.arcsij /置的对称弧 return OK / CreateUDN例例V0V4V3V1V22 0 1 2 3 4V0V1V2V3V413422110034下标顶点头指针编号1 1 无向图的邻接表无向图的邻接表 顶点通常按编号顺序将顶点数据存储在一维顶点通常按编号顺序将顶点数据存储在一维数组中;关联同一顶点的边用线性链表存储
22、。数组中;关联同一顶点的边用线性链表存储。二、邻接表二、邻接表该结点表示边(该结点表示边(V4, Vj),其中其中的的j是是Vj在一维数组中的位置在一维数组中的位置0 1 2 3 4 A B C D EABECD可见,在有向图的可见,在有向图的邻接表中不易找到邻接表中不易找到指向该顶点的弧指向该顶点的弧。1 4230 122 2 有向图的邻接表有向图的邻接表ABECD303420 在有向图的逆邻接在有向图的逆邻接表中,对每个顶点,链表中,对每个顶点,链接的是指向该顶点的弧接的是指向该顶点的弧。A B C D E 012343 3 有向图的有向图的逆逆邻接表邻接表typedef struct A
23、rcNode int adjvex; / 该弧所指向的顶点的位置 struct ArcNode *nextarc; / 指向下一条弧的指针 InfoType *info; / 该弧相关信息的指针 ArcNode; / 表结点弧的结点结构弧的结点结构adjvex nextarc info/ 图的邻接表存储表示图的邻接表存储表示typedef struct VNode VertexType data; / 顶点信息 ArcNode *firstarc; / 指向第一条依附自该顶点的弧 VNode, AdjListMAX_VERTEX_NUM; / 头结点、头结点数组类型 data firstarc
24、顶点的结点结构顶点的结点结构typedef struct AdjList vertices; int vexnum, arcnum; int kind; / 图的种类标志 ALGraph;图的结构定义图的结构定义(邻接表)无向图的邻接表的特点无向图的邻接表的特点 1)在)在G邻接表中,同一条边对应两个表结点;邻接表中,同一条边对应两个表结点; 2)顶点)顶点v的度:等于的度:等于v对应线性链表的长度;对应线性链表的长度; 3)判定两顶点)判定两顶点v ,u是否邻接:要看是否邻接:要看v对应线性链表中对应线性链表中有无对应的结点有无对应的结点u ; 4)在)在G中增减边:在两个单链表插入、删除结
25、点;中增减边:在两个单链表插入、删除结点; 5)设存储顶点的一维数组大小为)设存储顶点的一维数组大小为m(m 图的顶点数图的顶点数n), 图的边数为图的边数为e,G占用存储空间为:占用存储空间为:m+2e,与,与 G 的顶的顶点数、边数均有关,适用于边稀疏的图。点数、边数均有关,适用于边稀疏的图。 0 0 1 1 2 2 3 3 4 4V0V1V2V3V41 13 34 42 22 21 11 10 00 04 43 3邻接表的空间代价邻接表的空间代价与图的边及顶点数均有关与图的边及顶点数均有关 V0 V4 V3 V1 V22 2三、有向图的十字链表存储表示三、有向图的十字链表存储表示 弧的结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 定义 基本 术语 存储 结构图 遍历 生成 树最短 路径 幻灯片
限制150内