最新图的定义和术语(5)精品课件.ppt
《最新图的定义和术语(5)精品课件.ppt》由会员分享,可在线阅读,更多相关《最新图的定义和术语(5)精品课件.ppt(112页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、图的定义和术语图的定义和术语(5)例245136G1图G1中:V(G1)=1,2,3,4,5,6 E(G1)=, , , , , , 例157324G26图G2中:V(G2)=1,2,3,4,5,6,7 E(G1)=(1,2), (1,3), (2,3), (2,4),(2,5), (5,6), (5,7)邻接矩阵表示顶点间相联关系的矩阵v定义:设G=(V,E)是有n1个顶点的图,G的邻接矩阵A是具有以下性质的n阶方阵,其它0E(G)v,v或)v,(v若1,jijijiA例G12413例15324G200110001011101010101010100001100000000110v特点:l无
2、向图的邻接矩阵对称,可压缩存储;有n个顶点的无向图需存储空间为n(n+1)/2l有向图邻接矩阵不一定对称;有n个顶点的有向图需存储空间为nl无向图中顶点Vi的度TD(Vi)是邻接矩阵A中第i行元素之和l有向图中,u顶点Vi的出度是A中第i行元素之和u顶点Vi的入度是A中第i列元素之和l网络的邻接矩阵可定义为:,其它0E(G)v,v或)v,(v若,jijiijjiA0618360240120078400530750例1452375318642关联矩阵表示顶点与边的关联关系的矩阵v定义:设G=(V,E)是有n1个顶点,e0条边的图,G的关联矩阵A是具有以下性质的ne阶矩阵为头边相连,且顶点与边不相
3、连顶点与为尾边相连,且顶点与有向图:ijijiijijiA, 1, 0, 1,边不相连顶点与,边相连顶点与,无向图:jijijiA01,11000110000110114321例G124131234例15324G2123456110000000110011100101001000011432156例BDAC123456ABCD432156101011110000011100000111v特点l关联矩阵每列只有两个非零元素,是稀疏矩阵;n越大,零元素比率越大l无向图中顶点Vi的度TD(Vi)是关联矩阵A中第i行元素之和l有向图中,u顶点Vi的出度是A中第i行中“1”的个数u顶点Vi的入度是A中第
4、i行中“-1”的个数邻接表v实现:为图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点Vi的边(有向图中指以Vi为尾的弧)typedef struct node int adjvex; /邻接点域,存放与Vi邻接的点在表头数组中的位置 struct node *next; /链域,指示下一条边或弧JD;adjvex next表头接点:typedef struct tnode int vexdata; /存放顶点信息 struct node *firstarc; /指示第一个邻接点TD;TD gaM; /ga0不用vexdata firstarc例G1bdac例aecbdG21234
5、acdbvexdata firstarc 3 2 4 1adjvex next1234acdbvexdata firstarc 4 2 1 2adjvex next5e 4 3 5 1 5 3 2 3v特点l无向图中顶点Vi的度为第i个单链表中的结点数l有向图中u顶点Vi的出度为第i个单链表中的结点个数u顶点Vi的入度为整个单链表中邻接点域值是i的结点个数l逆邻接表:有向图中对每个结点建立以Vi为头的弧的单链表例G1bdac1234acdbvexdata firstarc 4 1 1 3adjvex next有向图的十字链表表示法弧结点:typedef struct arcnode int t
6、ailvex, headvex; /弧尾、弧头在表头数组中位置 struct arcnode *hlink;/指向弧头相同的下一条弧 struct arcnode *tlink; /指向弧尾相同的下一条弧AD;tailvex headvex hlink tlink顶点结点:typedef struct dnode int data; /存与顶点有关信息 struct arcnode *firstin;/指向以该顶点为弧头的第一个弧结点 struct arcnode *firstout; /指向以该顶点为弧尾的第一个弧结点DD;DD gM; /g0不用data firstin firstout例
7、bdacab cd1234 1 3 1 2 3 4 3 1 4 3 4 2 4 1无向图的邻接多重表表示法顶点结点:typedef struct dnode int data; /存与顶点有关的信息 struct node *firstedge; /指向第一条依附于该顶点的边DD;DD gaM; /ga0不用data firstedge边结点:typedef struct node int mark; /标志域 int ivex, jvex; /该边依附的两个顶点在表头数组中位置 struct node *ilink, *jlink; /分别指向依附于ivex和jvex的下一条边JD;mark
8、 ivex ilink jvex jlink例aecbd1234acdb5e 1 2 1 4 3 4 3 2 3 5 5 26.3 图的遍历深度优先遍历(DFS)v方法:从图的某一顶点V0出发,访问此顶点;然后依次从V0的未被访问的邻接点出发,深度优先遍历图,直至图中所有和V0相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止V1V2V4V5V3V7V6V8例深度遍历:V1 V2 V4 V8 V5 V3 V6 V7V1V2V4V5V3V7V6V8例例V1V2V4V5V3V7V6V8深度遍历:V1 V2 V4 V8 V
9、5 V6 V3 V7深度遍历:V1 V2 V4 V8 V5 V6 V3 V7V1V2V4V5V3V7V6V8例深度遍历:V1 V2 V4 V8 V3 V6 V7 V5v深度优先遍历算法l递归算法开始访问V0,置标志求V0邻接点有邻接点w求下一邻接点wV0W访问过结束NYNYDFS开始标志数组初始化Vi=1Vi访问过DFSVi=Vi+1Vi=Vexnums结束NNYYCh6_1.cV1V2V4V5V3V7V6V8例深度遍历:V112341342vexdata firstarc 2 7 8 3adjvex next55 6 4 1 5 1 2 8 2678678 7 3 6 3 5 4V3 V7
10、V6 V2 V5 V8 V4V1V2V4V5V3V7V6V8例12341342vexdata firstarc 2 7 8 3adjvex next55 6 4 8 2678678 7深度遍历:V1V3 V7 V6 V2 V4 V8 V5广度优先遍历(BFS)v方法:从图的某一顶点V0出发,访问此顶点后,依次访问V0的各个未曾访问过的邻接点;然后分别从这些邻接点出发,广度优先遍历图,直至图中所有已被访问的顶点的邻接点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止V1V2V4V5V3V7V6V8例广度遍历:V1 V2 V3
11、V4 V5 V6 V7 V8V1V2V4V5V3V7V6V8例例V1V2V4V5V3V7V6V8广度遍历:V1 V2 V3 V4 V5 V6 V7 V8广度遍历:V1 V2 V3 V4 V5 V6 V7 V8V1V2V4V5V3V7V6V8例广度遍历:V1 V2 V3 V4 V6 V7 V8 V5v广度优先遍历算法开始标志数组初始化Vi=1Vi访问过BFSVi=Vi+1Vi=Vexnums结束NNYYCh6_2.c开始访问V0,置标志求V邻接点ww存在吗V下一邻接点ww访问过结束NYNYBFS初始化队列V0入队队列空吗队头V出队访问w,置标志w入队NY例1423512341342vexdata
12、 firstarc 5 5 4 3adjvex next55 1 5 1 1 4 3 2 20 1 2 3 4 51fr遍历序列:10 1 2 3 4 54fr遍历序列:1 40 1 2 3 4 54 3fr遍历序列:1 4 3例1423512341342vexdata firstarc 5 5 4 3adjvex next55 1 5 1 1 4 3 2 20 1 2 3 4 54 3 2fr遍历序列:1 4 3 20 1 2 3 4 5 3 2fr遍历序列:1 4 3 20 1 2 3 4 5 3 2 5fr遍历序列:1 4 3 2 50 1 2 3 4 5 2 5fr遍历序列:1 4 3
13、 2 50 1 2 3 4 5 5fr遍历序列:1 4 3 2 50 1 2 3 4 5 fr遍历序列:1 4 3 2 5例1423512341342vexdata firstarc 5 5 4 3adjvex next55 1 5 1 1 4 3 2 26.4 生成树生成树v定义:所有顶点均由边连接在一起,但不存在回路的图叫v深度优先生成树与广度优先生成树v生成森林:非连通图每个连通分量的生成树一起组成非连通图的v说明l一个图可以有许多棵不同的生成树l所有生成树具有以下共同特点:u生成树的顶点个数与图的顶点个数相同u生成树是图的极小连通子图u一个有n个顶点的连通图的生成树有n-1条边u生成树
14、中任意两个顶点间的路径是唯一的u在生成树中再加一条边必然形成回路l含n个顶点n-1条边的图不一定是生成树GHKIV1V2V4V5V3V7V6V8例深度遍历:V1 V2 V4 V8 V5 V3 V6 V7V1V2V4V5V3V7V6V8深度优先生成树V1V2V4V5V3V7V6V8广度优先生成树V1V2V4V5V3V7V6V8V1V2V4V5V3V7V6V8广度遍历:V1 V2 V3 V4 V5 V6 V7 V8例ABLMCFDEGHKIJABLMCFJDEGHKI深度优先生成森林最小生成树v问题提出要在n个城市间建立通信联络网,顶点表示城市权城市间建立通信线路所需花费代价希望找到一棵生成树,它
15、的每条边上的权值之和(即建立该通信网所需花费的总代价)最小最小代价生成树v问题分析1654327131791812752410n个城市间,最多可设置n(n-1)/2条线路n个城市间建立通信网,只需n-1条线路问题转化为:如何在可能的线路中选择n-1条,能把 所有城市(顶点)均连起来,且总耗费 (各边权值之和)最小v构造最小生成树方法l普里姆(Prim)算法u算法思想:设N=(V,E)是连通网,TE是N上最小生成树中边的集合Y初始令U=u0,(u0V), TE=Y 在所有uU,vV-U的边(u,v)E中,找一条代价最小的边(u0,v0)Y 将(u0,v0)并入集合TE,同时v0并入UY 重复上述
16、操作直至U=V为止,则T=(V,TE)为N的最小生成树u算法实现:图用邻接矩阵表示u算法描述u算法评价:T(n)=O(n)Ch6_3.c例1654326513566425131163141643142116432142516543214253算法实现v在构造过程中,设置了两个辅助数组:v lowcost 存放生成树顶点集合内顶点到生成树外各顶点的各边上的当前最小权值;vnearvex 记录生成树顶点集合外各顶点距离集合内哪个顶点最近(即权值最小)。v例子50461322810251424221618120241814025102425022182201212016141602810280v若选
17、择从顶点0出发,即u0 = 0,则两个辅助数组的初始状态为:v然后反复做以下工作:v 在 lowcost 中选择 nearvexi -1 & lowcosti最小的边, 用 v 标记它。则选中的权值最小的边为(nearvexv, v), 相应的权值为 lowcostv。 0 28 10 - -1 0 0 0 0 0 0 lowcostnearvex0 1 2 3 4 5 6v将 nearvexv 改为-1, 表示它已加入生成树顶点集合。v将边 (nearvexv, v, lowcostv ) 加入生成树的边集合。v取 lowcosti = min lowcosti, Edgevi ,即用生成树
18、顶点集合外各顶点 i 到刚加入该集合的新顶点 v 的距离 Edgevi 与原来它们到生成树顶点集合中顶点的最短距离lowcosti 做比较, 取距离近的作为这些集合外顶点到生成树顶点集合内顶点的最短距离。如果生成树顶点集合外顶点 i 到刚加入该集合的新顶点 v 的距离比原来它到生成树顶点集合中顶点的最短距离还要近,则修改nearvexi : nearvexi = v。表示生成树外顶点i到生成树内顶点v当前距离最近。0 28 10 - -1 0 0 0 0 0 0 lowcostnearvex0 1 2 3 4 5 6选选 v=5选边选边 (0,5)顶点v=5加入生成树顶点集合:0 28 25
19、10 - -1 0 0 0 5 - -1 0 lowcostnearvex0 1 2 3 4 5 6选选 v=4选边选边 (5,4)50461322810251424221618原图 边 (0,5,10) 加入生成树12046132102550 1 2 3 4 5 6顶点v=4加入生成树顶点集合:0 28 22 25 10 24 - -1 0 0 4 - -1 - -1 4 lowcostnearvex选选 v=3选边选边 (4,3)50461322810251424221618原图 边 (5,4,25) 加入生成树125046132102522顶点v=3加入生成树顶点集合:0 28 12 2
20、2 25 10 18 - -1 0 3 - -1 - -1 - -1 3 lowcostnearvex0 1 2 3 4 5 6选选 v=2选边选边 (3,2)50461322810251424221618原图 边 (4,3,22) 加入生成树12504613210252212lowcostnearvex0 1 2 3 4 5 6顶点v=2加入生成树顶点集合:0 16 12 22 25 10 18 - -1 2 - -1 - -1 - -1 - -1 3 选选 v=1选边选边 (2,1)50461322810251424221618原图 边 (3,2,12) 加入生成树125041321025
21、221612顶点v=1加入生成树顶点集合:0 16 12 22 25 10 14 - -1 - -1 - -1 - -1 - -1 - -1 1 lowcostnearvex0 1 2 3 4 5 6选选 v=6选边选边 (1,6)50461322810251424221618原图 边 (2,1,16) 加入生成树125046132102514221612lowcostnearvex0 1 2 3 4 5 6顶点v=6加入生成树顶点集合:0 16 12 22 25 10 14 - -1 - -1 - -1 - -1 - -1 - -1 - -1 50461322810251424221618原
22、图 边 (1,6,14) 加入生成树1250461321025142216126.5 拓扑排序问题提出:学生选修课程问题顶点表示课程有向弧表示先决条件,若课程i是课程j的先决条件,则图中有弧学生应按怎样的顺序学习这些课程,才能无矛盾、顺利地完成学业拓扑排序 定义vAOV网用顶点表示活动,用弧表示活动间优先关系的有向图称为顶点表示活动的网(Activity On Vertex network),简称AOV网l若是图中有向边,则vi是vj的直接前驱;vj是vi的直接后继lAOV网中不允许有回路,这意味着某项活动以自己为先决条件v拓扑排序把AOV网络中各顶点按照它们相互之间的优先关系排列成一个线性序
23、列的过程叫l检测AOV网中是否存在环方法:对有向图构造其顶点的拓扑有序序列,若网中所有顶点都在它的拓扑有序序列中,则该AOV网必定不存在环拓扑排序的方法v在有向图中选一个没有前驱的顶点且输出之v从图中删除该顶点和所有以它为尾的弧v重复上述两步,直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止例课程代号 课程名称 先修棵C1C2C3C4C5C6C7C8C9C10C11C12无C1C1,C2C1C3,C4C11C3.C5C3,C6无C9C9C1,C9,C10程序设计基础离散数学数据结构汇编语言语言的设计和分析计算机原理编译原理操作系统高等数学线性代数普通物理数值分析C1C2C3C4C5C6C
24、7C8C9C10C11C12C1C2C3C4C5C6C7C8C9C10C11C12拓扑序列:C1-C2-C3-C4-C5-C7-C9-C10-C11-C6-C12-C8或 :C9-C10-C11-C6-C1-C12-C4-C2-C3-C5-C7-C8一个AOV网的拓扑序列不是唯一的C1C2C3C4C5C6C7C8C9C10C11C12C2C3C4C5C6C7C8C9C10C11C12拓扑序列:C1(1)C3C4C5C6C7C8C9C10C11C12拓扑序列:C1-C2(2)C4C5C6C7C8C9C10C11C12拓扑序列:C1-C2-C3(3)C5C6C7C8C9C10C11C12拓扑序列:
25、C1-C2-C3-C4(4)C6C8C10C11C12拓扑序列:C1-C2-C3-C4-C5-C7-C9C6C8C11C12拓扑序列:C1-C2-C3-C4-C5-C7-C9 -C10(8)C6C7C8C9C10C11C12拓扑序列:C1-C2-C3-C4-C5(5)C6C8C9C10C11C12拓扑序列:C1-C2-C3-C4-C5-C7(6)C6C8C12拓扑序列:C1-C2-C3-C4-C5-C7-C9 -C10-C11(9)C8C12拓扑序列:C1-C2-C3-C4-C5-C7-C9 -C10-C11-C6(10)C8拓扑序列:C1-C2-C3-C4-C5-C7-C9 -C10-C11
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 定义 术语 精品 课件
限制150内