图的定义和基本术语图的存储结构图的遍历生成树最短路径.PPT
《图的定义和基本术语图的存储结构图的遍历生成树最短路径.PPT》由会员分享,可在线阅读,更多相关《图的定义和基本术语图的存储结构图的遍历生成树最短路径.PPT(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、图的定义和基本术语图的存储结构图的遍历生成树最短路径 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望图的定义和基本术语图的定义和基本术语一一 、图的定义、图的定义 本章介绍另一种非线性数据结构 图,主要学习图的存储结构以及若干图的操作的实现。图是一种多对多的结构关系,每个元素可以图是一种多对多的结构关系,每个元素可以有零个或多个直接前趋;零个或多个直接后继。有零个或多个直接前趋;零个或多个直接后继。图图G由两个集合构成,记作由两个集合构成,记作G=(V,A)其中其
2、中V是顶点的非空有限集合,是顶点的非空有限集合,A 是边的有限是边的有限集合,其中边是顶点的无序对或有序对集合,其中边是顶点的无序对或有序对(此时此时的图称为的图称为无向图无向图或或有向图有向图)。无向图无向图G1=(V1,A1),V1=v0,v1,v2,v3,v4 ,A1=(v0,v1),(v0,v3),(v1,v2),(v1,v4),(v2,v3),(v2,v4)无序对无序对(vi,vj):用连接顶点用连接顶点vi、vj的线段的线段表示,称为无向边;表示,称为无向边;G1图示图示 V0 V4 V3 V1 V2有序对有序对:用以为用以为vi起点起点(弧尾)、以、以vj为终点为终点(弧头)的有
3、向线段表示,称为有向边或弧;的有向线段表示,称为有向边或弧;G2 图示图示 V0 V1 V2 V3有向图有向图G2=(V2,A2),V2=v0 v1,v2,v3,A2=,例例1 1 交通图(公路、铁路)交通图(公路、铁路)顶点:地点顶点:地点 边:连接地点的路边:连接地点的路 交通图中的有单行道、双行道,分别用有向交通图中的有单行道、双行道,分别用有向 边、无向边表示;边、无向边表示;例例2 2 电路图电路图 顶点:元件顶点:元件 边:连接元件之间的线路边:连接元件之间的线路例例3 3 通讯线路图通讯线路图 顶点:地点顶点:地点 边:地点间的连线边:地点间的连线例例4 4 各种流程图各种流程图
4、(如如生产流程图生产流程图)顶点:工序顶点:工序 边:各道工序之间的顺序关系边:各道工序之间的顺序关系 V0 V4 V3 V1 V2 V0 V1 V2 V3图的实例ADT Graph 数据对象数据对象V:V是具有相同特性的数据元素的集合,是具有相同特性的数据元素的集合,称为顶点集。称为顶点集。ADT 图图 的的 定定 义义基本操作基本操作:CreateGraph(&G,V,V R)/按定义构造图 初始条件初始条件:V是图的顶点集是图的顶点集,V R 是图中是图中弧弧的集合的集合。操作结果操作结果:按按V和和V R的的定义构造定义构造图图G 。数据关系数据关系R:R=VR VR=v,w V,且,
5、且p(v,w),表表 示从示从v到到w 的弧,谓词的弧,谓词p(v,w)定定义义 了弧了弧的意义或信息。的意义或信息。DestroyGraph(&G)/销毁 初始条件初始条件:图图G存在。存在。操作结果操作结果:销毁销毁图图G 。LocateVex(G,u)/定位 初始条件初始条件:图图G存在,存在,u 和和G中顶点有相同特性中顶点有相同特性。操作结果操作结果:若若G中存在顶点中存在顶点u,则返回该顶点在,则返回该顶点在 图中位置图中位置;否则返回其它信息。;否则返回其它信息。GetVex(G,v)/求值 初始条件初始条件:图图G存在,存在,v 是是G中某个顶点。中某个顶点。操作结果操作结果:
6、返回返回v的值。的值。PutVex(&G,v,value)/赋值 初始条件初始条件:图图G存在,存在,v 是是G中某个顶点。中某个顶点。操作结果操作结果:对对 v 赋值赋值value。FirstAdjVex(G,v)/求第一个邻接点 初始条件初始条件:图图G存在,存在,v 是是G中某个顶点。中某个顶点。操作结果操作结果:返回返回 v 的第一个邻接点。若顶点的第一个邻接点。若顶点v在在 G 中没有邻接顶点,则返回中没有邻接顶点,则返回“空空”。NextAdjVex(G,v,w)/求下一个邻接点 初始条件初始条件:图图G存在,存在,v 是是G中某个顶点,中某个顶点,w 是是 v 的邻接点的邻接点。
7、操作结果操作结果:返回返回 v 的(相对于的(相对于 w 的)下一个邻接点。的)下一个邻接点。若若 w 是是 v 的最后一个邻接点,则返回的最后一个邻接点,则返回“空空”。InsertVex(&G,v);/插入顶点 初始条件初始条件:图图G存在,存在,v和和G中顶点有相同特性中顶点有相同特性。操作结果操作结果:在图在图G中增添新顶点中增添新顶点v。DeleteVex(&G,v)/删除顶点 初始条件初始条件:图图G存在,存在,v和和G中顶点有相同特性中顶点有相同特性。操作结果操作结果:删除删除G中顶点中顶点v及其相关的弧。及其相关的弧。InsertArc(&G,v,w)/插入弧 初始条件初始条件
8、:图图G存在,存在,v 和和w是是G中两个顶点。中两个顶点。操作结果操作结果:在在G中增添弧中增添弧,若,若G是无向的,是无向的,则还增添对称弧则还增添对称弧。DeleteArc(&G,v,w)/删除弧 初始条件初始条件:图图G存在,存在,v 和和w是是G中两个顶点。中两个顶点。操作结果操作结果:在在G中删除弧中删除弧,若,若G是无向的,是无向的,则还删除对称弧则还删除对称弧。DFSTraverse(G,v,Visit()/深度优先遍历 初始条件初始条件:图图G存在,存在,v 是是G中某个顶点,中某个顶点,Visit是顶点的应用函数是顶点的应用函数。操作结果操作结果:从顶点从顶点v起深度优先遍
9、历图起深度优先遍历图G,并对每,并对每 个顶点调用函数个顶点调用函数Visit一次且仅一次。一次且仅一次。一旦一旦Visit()失败,则操作失败。()失败,则操作失败。BFSTraverse(G,v,Visit()/广度优先遍历 初始条件初始条件:图图G存在,存在,v 是是G中某个顶点,中某个顶点,Visit是顶点的应用函数是顶点的应用函数。操作结果操作结果:从顶点从顶点v起广度优先遍历图起广度优先遍历图G,并对每,并对每 个顶点调用函数个顶点调用函数Visit一次且仅一次。一次且仅一次。一旦一旦Visit()失败,则操作失败。()失败,则操作失败。2 顶点的度、入度、出度顶点的度、入度、出度
10、 顶点顶点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二、图的基本术语二、图的基本术语1 邻接点及关联边邻接点及关联边 邻接点:边的两个顶点;邻接点:边的两个顶点;关联边:若边关联边:若边e=(v,u),则称边则称边e与顶点与顶点 v和和u 相关联;相关联;设图设图G的顶点数为的顶点数为n,边数为,边数为e则图的所有顶点的
11、度数之和则图的所有顶点的度数之和=2*e(每条边对图的所有顶点的度数之和(每条边对图的所有顶点的度数之和“贡献贡献”2度)度)无向图无向图G1有向图有向图G2 V0 V4 V3 V1 V2 V0 V1 V2 V33路径、回路路径、回路(环)4无向图无向图G1=(V1,E1)中的顶点序列)中的顶点序列v1,v2,vk,若若(vi,vi+1)E1(i=1,2,k-1),v=v1,u=vk,则称该序列是从顶点则称该序列是从顶点v到顶点到顶点u的路径;若的路径;若v=u,则称该序列为回路;则称该序列为回路;在在G1中,中,v0,v1,v2,v3 是是v0到到v3的路径;的路径;5 v0,v1,v2,v
12、3,v0是回路;是回路;6有向图有向图G2=(V2,E2)中的顶点序列)中的顶点序列v1,v2,vk,7 E2(i=1,2,k-1),若若v=v1,u=vk,则称则称该该8序列是从顶点序列是从顶点v到顶点到顶点u的路径;若的路径;若v=u,则称该,则称该序序9列为回路;列为回路;在在G2中,中,10v0,v2,v3是是v0到到v3的路径的路径11v0,v2,v3,v0是回路;是回路;3 3简单路径和简单回路简单路径和简单回路4 4 在一条路径中在一条路径中,若所有顶点各不相若所有顶点各不相同同,则称该路径为简单路径;若除起点和终则称该路径为简单路径;若除起点和终点外点外,5 5 其余顶点各不相
13、同的回路称为简单回路。其余顶点各不相同的回路称为简单回路。例例有向图有向图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是简单回路;是简单回路;4 4连通图(强连通图)连通图(强连通图)5 5 在无(有)向图在无(有)向图G=(V,E)中,若对任何中,若对任何两个顶点两个顶点 v、u 都存在从都存在从v 到到 u 的路径,则称的路径,则称G是连通图(强连通图)是连通图(强连通图)非非连连通通图图 连连通
14、通图图 强强连连通通图图 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的子图;的子图;(a)(b)(c)V0 V4 V3 V1 V2 V0 V4 V3 V1 V2 V0 V4 V3 V1 V25 子图子图例 下列(b)、(c)是(a)的子图6(强)连通分量连通分量7 无向图无向图G的的极大连通子图极大连通子图称为称为G的连通分量。的连通分量。8 极大连通
15、子图意思是:该子图是极大连通子图意思是:该子图是 G 连通子图,将连通子图,将G 的任何不在该子图中的顶点加入,子图不再连通;的任何不在该子图中的顶点加入,子图不再连通;连通分量连通分量非非连连通通图图 V0 V2 V3 V1 V5 V4 V0 V2 V1非连通分量非连通分量有向图有向图D 的极大强连通子图的极大强连通子图称为称为D 的强连通的强连通分量。极大强连通子图意思是:该子图是分量。极大强连通子图意思是:该子图是D强强连通子图,将连通子图,将D的任何不在该子图中的顶点加的任何不在该子图中的顶点加入,子图不再是强连通的。入,子图不再是强连通的。强连通分量强连通分量 V0 V1 V2 V3
16、 V0 V2 V3 V1非强连通图非强连通图7 生成树生成树 包含包含无向图无向图G 所有顶点所有顶点的的极小连通子图极小连通子图称为称为G 的的生成树。极小连通子图意思是:该子图是生成树。极小连通子图意思是:该子图是G 的连通子的连通子图,在该子图中删除任何一条边,子图不再连通。图,在该子图中删除任何一条边,子图不再连通。G的生成树的生成树 V0 V4 V3 V1 V2连通图连通图 G V0 V4 V3 V1 V2 V0 V4 V3 V1 V2若若T是是G 的生成树的生成树当且仅当当且仅当T 满足如下条件:满足如下条件:T是是G 的连通子图;的连通子图;T包含包含G 的所有顶点;的所有顶点;
17、T中无回路。中无回路。一棵一棵n n个顶点的生成树有且仅有足以构成树个顶点的生成树有且仅有足以构成树的的n-1n-1条边。条边。说明:说明:G的生成树的生成树 V0 V4 V3 V1 V2连通图连通图 G V0 V4 V3 V1 V2 V0 V4 V3 V1 V2若在一棵生成树上删除一条边,就不再连通。若在一棵生成树上删除一条边,就不再连通。若在一棵生成树上添加一条边,必定构成一若在一棵生成树上添加一条边,必定构成一个环。个环。不再连通不再连通构成环构成环图的存储结构图的存储结构 由于图中任意两个顶点之间都可能存在联由于图中任意两个顶点之间都可能存在联系,因此难以以数据元素在存储区中物理位置系
18、,因此难以以数据元素在存储区中物理位置表示它们间的关系,仍可以借助数组表示之。表示它们间的关系,仍可以借助数组表示之。另一方面,用也可以多重链表示图。但由另一方面,用也可以多重链表示图。但由于图中顶点的度可能相差悬殊,会因此造成空于图中顶点的度可能相差悬殊,会因此造成空间的浪费;反之,若按每个顶点的度设计不同间的浪费;反之,若按每个顶点的度设计不同的结点结构,又会造成操作上的不便。的结点结构,又会造成操作上的不便。应根据具体的图和需要,设计恰当的结应根据具体的图和需要,设计恰当的结点结构和表结构。点结构和表结构。图的存储结构图的存储结构至少要保存两类信息:至少要保存两类信息:1)1)顶点的数据
19、;顶点的数据;2)2)顶点间的关系顶点间的关系。如何表示顶点间的关系?V0 V4 V3 V1 V2 V0 V1 V2 V3常用图的存储表示常用图的存储表示一、图的数组一、图的数组(邻接矩阵)存储表示存储表示二、图的邻接表存储表示二、图的邻接表存储表示三、有向图的十字链表存储表示三、有向图的十字链表存储表示 四、无向图的邻接多重表存储表示四、无向图的邻接多重表存储表示邻接矩阵邻接矩阵:G的邻接矩阵是满足如下条件的的邻接矩阵是满足如下条件的n阶矩阵:阶矩阵:Aij=1 若若(vi,vj)E 或或 E0 否则否则0 1 0 1 00 1 0 1 01 10 1 0 10 1 0 12 20 1 0
20、1 10 1 0 1 13 30 1 0 00 1 0 04 40 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一、数组表示法一、数组表示法(邻接矩阵表示邻接矩阵表示)在数组表示法中,在数组表示法中,用邻接矩阵表示顶点间的关系用邻接矩阵表示顶点间的关系typedef struct ArcCell/弧的定义 VRType adj;/VRType是顶点关系类型。对无权图,/用1或0表示相邻否;对带权图,则为权值类型。InfoType *info;/
21、该弧相关信息的指针 ArcCell,AdjMatrixMAX_VERTEX_NUM MAX_VERTEX_NUM;/图的数组图的数组(邻接矩阵邻接矩阵)存储表示存储表示#define INFINITY INT_MAX/最大值#define MAX_VERTEX_NUM 20/最大顶点个数typedef enumDG,DN,UDG,UDN graphkind;/有向图,有向网,无向图,无向网typedef struct /图的定义 VertexType vexsMAX_VERTEX_NUM;/顶点向量保存顶点数据 AdjMatrix arcs;/邻接矩阵保存顶点间关系 int vexnum,ar
22、cnum;/顶点数,弧数 GraphKind kind;/图的种类标志 MGraph;无向图数组表示法特点:无向图数组表示法特点:1)无向图邻接矩阵是对称矩阵,同一条边表示了两次;)无向图邻接矩阵是对称矩阵,同一条边表示了两次;0 1 0 1 00 1 0 1 01 10 1 0 10 1 0 12 20 1 0 1 10 1 0 1 13 30 1 0 00 1 0 04 40 1 1 0 00 1 1 0 0对对有向图有向图的数组表示法的数组表示法可做类似的讨论可做类似的讨论 V0 V4 V3 V1 V22)顶点)顶点v的度:等于二维数组对应行(或列)中的度:等于二维数组对应行(或列)中1
23、的个数;的个数;3)判断两顶点)判断两顶点v、u是否为邻接点:只需判二维数组对应是否为邻接点:只需判二维数组对应分量是否非零;分量是否非零;4)顶点不变,在图中)顶点不变,在图中增加增加、删除删除边:只需对二维数组对边:只需对二维数组对应分量应分量赋非零值赋非零值或或清零清零;5)用二维数组存储顶点数为)用二维数组存储顶点数为 n的图的图,占用存储空间只与它占用存储空间只与它的顶点数的顶点数n有关,与边数有关,与边数e无关。适用于边稠密的图。无关。适用于边稠密的图。图的基本操作的实现图的基本操作的实现(采用数组表示法):1)求无向图某顶点)求无向图某顶点vi的度:的度:(或有向图或有向图vi的
24、出度的出度)Ai0 到到Ain-1中的非零个数,即数组中的非零个数,即数组A第第i行的非行的非零元素的个数;零元素的个数;0 1 0 1 00 1 0 1 01 10 1 0 10 1 0 12 20 1 0 1 10 1 0 1 13 30 1 0 00 1 0 04 40 1 1 0 00 1 1 0 0 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中第
25、中第i列的非零元素的个数;列的非零元素的个数;3)求图中的总边数:扫描整个数组)求图中的总边数:扫描整个数组A,统计出数组,统计出数组中非零元素的个数。无向图的总边数为非零元素个中非零元素的个数。无向图的总边数为非零元素个数的一半,而有向图的总弧数为非零元素个数。数的一半,而有向图的总弧数为非零元素个数。图的构造操作的实现图的构造操作的实现(采用数组表示法)Status CreateGraph(Mgraph&G)/采用数组表示法,构造图G scanf(&G.kind);switch(G.kind)case DG:return CreateDG(G);/构造有向图G case DN:return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 定义 基本 术语 存储 结构图 遍历 生成 树最短 路径
限制150内