版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022/9/151第十三章 图13.1 图的定义和术语图(Graph)图G是由两个集合V(G)和E(G)组成的,记为G=(V,E)其中:V(G)是顶点的非空有限集 E(G)是边的有限集合,边是顶点的无序对或有序对有向图有向图G是由两个集合V(G)和E(G)组成的 其中:V(G)是顶点的非空有限集 E(G)是有向边(也称弧)的有限集合,弧是顶点的有序对,记为,v,w是顶点,v为弧尾,w为弧头无向图无向图G是由两个集合V(G)和E(G)组成的 其中:V(G)是顶点的非空有限集 E(G)是边的有限集合,边是顶点的无序对,记为 (v,w)或(w,v),并且(v,w)=(w,v)2022/9/152例
2、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)2022/9/153有向完备图n个顶点的有向图最大边数是n(n-1)无向完备图n个顶点的无向图最大边数是n(n-1)/2权与图的边或弧相关的数叫网带权的图叫子图如果图G(V,E)和图G(V,E),满足:VVEE 则称G为G的子图顶点的度无向图中,顶点的度为与每个顶点相连的边数有向图中,顶点的度分成入度与出度入度:以该顶点为头的
3、弧的数目出度:以该顶点为尾的弧的数目路径路径是顶点的序列V=Vi0,Vi1,Vin,满足(Vij-1,Vij)E 或 E,(1jn)2022/9/154路径长度沿路径边的数目或沿路径各边权值之和回路第一个顶点和最后一个顶点相同的路径叫简单路径序列中顶点不重复出现的路径叫简单回路除了第一个顶点和最后一个顶点外,其余顶点不重复出现的回路叫连通从顶点V到顶点W有一条路径,则说V和W是连通的连通图图中任意两个顶点都是连通的叫连通分量非连通图的每一个连通部分叫强连通图有向图中,如果对每一对Vi,VjV, ViVj,从Vi到Vj 和从Vj到 Vi都存在路径,则称G是2022/9/155例213213有向完
4、备图无向完备图356例245136图与子图例245136G1顶点2入度:1 出度:3顶点4入度:1 出度:0例157324G26顶点5的度:3顶点2的度:42022/9/156例157324G26例245136G1路径:1,2,3,5,6,3路径长度:5简单路径:1,2,3,5回路:1,2,3,5,6,3,1简单回路:3,5,6,3路径:1,2,5,7,6,5,2,3路径长度:7简单路径:1,2,5,7,6回路:1,2,5,7,6,5,2,1简单回路:1,2,3,12022/9/157连通图例245136强连通图356例非连通图连通分量例2451362022/9/15813.2 图的存储结构多
5、重链表例G12413例15324G2V1V2 V4 V3 V1 V2 V4 V5 V32022/9/159邻接矩阵表示顶点间相联关系的矩阵定义:设G=(V,E)是有n1个顶点的图,G的邻接矩阵A是具有以下性质的n阶方阵例G12413例15324G22022/9/1510特点:无向图的邻接矩阵对称,可压缩存储;有n个顶点的无向图需存储空间为n(n+1)/2有向图邻接矩阵不一定对称;有n个顶点的有向图需存储空间为n无向图中顶点Vi的度TD(Vi)是邻接矩阵A中第i行元素之和有向图中,顶点Vi的出度是A中第i行元素之和顶点Vi的入度是A中第i列元素之和网络的邻接矩阵可定义为:2022/9/1511例
6、14523753186422022/9/1512邻接表实现:为图中每个顶点建立一个单链表,第i个单链表存放顶点Vi的所有邻接顶点。2022/9/1513特点无向图中顶点Vi的度为第i个单链表中的结点数有向图中顶点Vi的出度为第i个单链表中的结点个数顶点Vi的入度为整个单链表中邻接点域值是i的结点个数逆邻接表:有向图中对每个结点建立以Vi为终点的边的单链表求解麻烦!例 1 3 11342 2 42022/9/1514 紧缩邻接表将图G的每个顶点的邻接表紧凑地存储在2个一维数组List和h中。其中一维数组List依次存储顶点1,2,n的邻接顶点。数组单元hi存储顶点i的邻接表在数组List中的起始
7、位置。 紧缩邻接表如图G2和G1的紧缩邻接表表示分别如下图(a)和(b):2022/9/151513.3 图的遍历深度优先遍历(DFS)方法:从图的某一顶点V0出发,访问此顶点;然后依次从V0的未被访问的邻接点出发,深度优先遍历图,直至图中所有和V0相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止(问题:什么时候会出现这种情况?)V1V2V4V5V3V7V6V8例深度遍历:V1 V2 V4 V8 V5 V3 V6 V7类似于:树的前序遍历!2022/9/1516V1V2V4V5V3V7V6V8例例V1V2V4V5V
8、3V7V6V8深度遍历:V1 V2 V4 V8 V5 V6 V3 V7深度遍历:V1 V2 V4 V8 V5 V6 V3 V72022/9/1517V1V2V4V5V3V7V6V8例深度遍历:V1 V2 V4 V8 V3 V6 V7 V52022/9/1518深度优先遍历算法递归算法开始访问v,置标志求v邻接点有邻接点u求下一邻接点uvu访问过结束NYNYDFS开始标志数组初始化Vi=1Vi访问过DFSVi=Vi+1Vi=Vexnums结束NNYY2022/9/1519V1V2V4V5V3V7V6V8例深度遍历:V112341342vexdatafirstarc 2 7 8 3adjvexne
9、xt55 6 4 1 5 1 2 8 2678678 7 3 6 3 5 4V3 V7 V6 V2 V5 V8 V42022/9/1520V1V2V4V5V3V7V6V8例12341342vexdatafirstarc 2 7 8 3adjvexnext55 6 4 8 2678678 7深度遍历:V1V3 V7 V6 V2 V4 V8 V52022/9/152113.3 图的遍历广度优先搜索(BFS)方法:从图的某一顶点V0出发,访问此顶点后,依次访问V0的各个未曾访问过的邻接顶点;然后分别从这些邻接顶点出发,广度优先遍历图,直至图中所有已被访问的顶点的邻接点都被访问到;若此时图中尚有顶点未
10、被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止V1V2V4V5V3V7V6V8例广度遍历:V1 V2 V3 V4 V5 V6 V7 V8类似于:树的层次遍历!2022/9/1522V1V2V4V5V3V7V6V8例例V1V2V4V5V3V7V6V8广度遍历:V1 V2 V3 V4 V5 V6 V7 V8广度遍历:V1 V2 V3 V4 V5 V6 V7 V82022/9/1523V1V2V4V5V3V7V6V8例广度遍历:V1 V2 V3 V4 V6 V7 V8 V52022/9/1524广度优先遍历算法开始标志数组初始化Vi=1Vi访问过BFSVi=V
11、i+1Vi=Vexnums结束NNYY2022/9/1525开始访问v置标志求w邻接点uu存在吗w下一邻接点uu访问过结束NYNYBFS初始化队列v入队队列空吗队头w出队访问u,置标志u入队NaaY2022/9/1526例1423512341342vexdatafirstarc 5 5 4 3adjvexnext55 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 32022/9/1527例1423512341342vexdatafirstarc 5 5 4 3adjvexnex
12、t55 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 52022/9/15280 1 2 3 4 5 2 5fr遍历序列:1 4 3 2 50 1 2 3 4 5 5fr遍历序列:1 4 3 2 50 1 2 3 4 5 fr遍历序列:1 4 3 2 5例1423512341342vexdatafirstarc 5 5 4 3adjvexnext55 1 5 1 1 4 3 2 22022/9/152913.4 最短路径问题提出用
13、带权的有向图表示一个交通运输网,图中:顶点表示城市边表示城市间的交通联系权表示此线路的长度或沿此线路运输所花的时间或费用等问题:从某顶点出发,沿图的边到达另一顶点所经过的路径中, 各边上权值之和最小的一条路径最短路径单源最短路径51643208562301371732913长度最短路径8131921202022/9/1530Dijkstra算法思想按路径长度递增次序产生最短路径算法:把V分成两组:(1)S:已求出最短路径的顶点的集合(2)V-S=T:尚未确定最短路径的顶点集合将T中顶点按最短路径递增的次序加入到S中,保证:(1)从源点V0到S中各顶点的最短路径长度都不大于 从V0到T中任何顶点
14、的最短路径长度 (2)每个顶点对应一个距离值 S中顶点:从V0到此顶点的最短路径长度 T中顶点:从V0到此顶点的只包括S中顶点作中间 顶点的最短路径长度依据:可以证明V0到T中顶点Vk的最短路径,或是从V0到Vk的 直接路径的权值;或是从V0经S中顶点到Vk的路径权值之和2022/9/1531求最短路径步骤初使时令 S=V0,T=其余顶点,T中顶点对应的距离值若存在,距离值为弧上的权值若不存在,距离值为从T中选取一个其距离值为最小的顶点W,加入S对T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值比不加W的路径要短,则修改此距离值重复上述步骤,直到S中包含所有顶点,即S=V为止
15、2022/9/1532迭代Sudist2dist3dist4dist5初始1-103010011,2210603010021,2,441050309031,2,4,331050306041,2,4,3,55105030602022/9/1533算法描述算法分析:T(n)=O(n)算法实现图用带权邻接矩阵存储a 数组dist存放当前找到的从源点V0到每个终点的最短路径长度,其初态为图中直接路径权值数组pre表示从V0到各终点的最短路径上,此顶点的前一顶点的序号;若从V0到某终点无路径,则用0作为其前一顶点的序号2022/9/1534所有顶点对之间的最短路径方法一:每次以一个顶点为源点,重复执行D
16、ijkstra算法n次 T(n)=O(n)方法二: Floyd算法算法思想:逐个顶点试探法求最短路径步骤初始时设置一个n阶方阵,令其对角线元素为0,若存在弧,则对应元素为权值;否则为逐步试着在原直接路径中增加中间顶点,若加入中间点后路径变短,则修改之;否则,维持原值所有顶点试探完毕,算法结束2022/9/1535例ACB2643110 4 116 0 23 0初始:路径:AB ACBA BCCA0 4 66 0 23 7 0加入B:路径:AB ABCBA BCCA CAB0 4 116 0 23 7 0加入A:路径:AB ACBA BCCA CAB0 4 65 0 23 7 0加入C:路径:A
17、B ABCBCA BCCA CAB0 0 00 0 00 0 0path=0 0 00 0 00 1 0path=0 0 20 0 00 1 0path=0 0 23 0 00 1 0path=2022/9/1536算法实现图用邻接矩阵存储二维数组c存放最短路径长度pathij是从Vi到Vj的最短路径上Vj前一顶点序号算法描述算法分析:T(n)=O(n)实际上,从实现代码来看: Floyd算法的代码比用Dijkstra算法要简明得多!这样看来, Floyd算法似乎没带来更多的好处?!2022/9/153713.5 生成树生成树定义:所有顶点均由边连接在一起,但不存在回路的图叫说明:一个图可以有
18、许多棵不同的生成树所有生成树具有以下共同特点:生成树的顶点个数与图的顶点个数相同生成树是图的极小连通子图一个有n个顶点的连通图的生成树有n-1条边生成树中任意两个顶点间的路径是唯一的在生成树中再加一条边必然形成回路含n个顶点n-1条边的图不一定是生成树GHKI2022/9/1538最小生成树问题提出要在n个城市间建立通信联络网,顶点表示城市权城市间建立通信线路所需花费代价希望找到一棵生成树,它的每条边上的权值之和(即建立该通信网所需花费的总代价)最小最小代价生成树问题分析1654327131791812752410n个城市间,最多可设置n(n-1)/2条线路n个城市间建立通信网,只需n-1条线
19、路问题转化为:如何在可能的线路中选择n-1条,能把 所有城市(顶点)均连起来,且总耗费 (各边权值之和)最小2022/9/1539最小生成树性质用贪心算法设计策略可以设计出构造最小生成树的有效算法。本节介绍的构造最小生成树的Prim算法和Kruskal算法都可以看作是应用贪心算法设计策略的例子。尽管这2个算法做贪心选择的方式不同,它们都利用了下面的最小生成树性质:设G=(V,E)是连通带权图,U是V的真子集。如果(u,v)E,且uU,vV-U,且在所有这样的边中,(u,v)的权cuv最小,那么一定存在G的一棵最小生成树,它以(u,v)为其中一条边。这个性质有时也称为MST性质。 2022/9/
20、1540MST性质证明 图示 含边(u,v)的圈假设G的任何一棵最小生成树都不含边(u,v)。将边(u,v)添加到G的一棵最小生成树T上,将产生含有边(u,v)的圈,并且在这个圈上有一条不同于(u,v)的边(u,v),使得uU,vV-U,如下图所示。 将边(u,v)删去,得到G的另一棵生成树T。由于cuvcuv,所以T的耗费T的耗费。于是T是一棵含有边(u,v)的最小生成树,这与假设矛盾。 2022/9/1541构造最小生成树方法方法一:Prim算法算法思想:设G=(V,E)是连通网,T是N上最小生成树中边的集合初始令U=u0,(u0V), T=在所有uU,vV-U的边(u,v)E中,找一条代
21、价最小的边(u0,v0)将(u0,v0)并入集合T,同时v0并入U重复上述操作直至U=V为止,则T=(V, T)为N的最小生成树算法实现:图用邻接矩阵表示算法描述算法评价:T(n)=O(n)2022/9/1542例16543265135664251311631416431421164321425165432142532022/9/1543方法二:Kruskal算法算法思想:设G=(V,E),令最小生成树初始状态为只有n个顶点而无边的非连通图T=(V,),每个顶点自成一个连通分量在E中选取代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中;否则,舍去此边,选取下一条代价最
22、小的边依此类推,直至T中所有顶点都在同一连通分量上为止例1654326513566425165432123452022/9/1544算法描述:Prim算法与Kruskal算法的比较 从算法的时间复杂性看: 当e= (n2)时,Kruskal算法比Prim算法差,但当e= o(n2)时,Kruskal算法却比Prim算法好得多。算法分析: 设输入的连通赋权图有e条边,则将这些边依其权值组成优先队列需要O(e)时间;while循环中,DeleteMin运算需要O(loge)时间,因此关于优先队列所作运算的时间为O(eloge)。 实现UnionFind所需的时间为O(eloge)。 Kruskal
23、算法所需的计算时间是O(eloge)。2022/9/154513.8 拓扑排序问题提出:学生选修课程问题顶点表示课程有向弧表示先决条件,若课程i是课程j的先决条件,则图中有弧学生应按怎样的顺序学习这些课程,才能无矛盾、顺利地完成学业拓扑排序定义AOV网用顶点表示活动,用弧表示活动间优先关系的有向图称为顶点表示活动的网(Activity On Vertex network),简称AOV网若是图中有向边,则vi是vj的直接前驱;vj是vi的直接后继AOV网中不允许有回路,这意味着某项活动以自己为先决条件2022/9/1546拓扑排序把AOV网络中各顶点按照它们相互之间的优先关系排列成一个线性序列的过程叫检测AOV网中是否存在环方法:对有向图构造其顶点的拓扑有序序列,若网中所有顶点都在它的拓扑有序序列中,则该AOV网必定不存在环拓扑排序的方法在有向图中选一个没有前驱的顶点且输出之从图中删除该顶点和所有以它为尾的弧重复上述两步,直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止2022/9/1547例课程代号 课程名称 先修棵C1C2C3C4C5C6C7C8C9C10C11C12无C1C1,C2C1C3,C4C11C3.C5C3,C6无C9C9C1,C9,C10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广告牌建设施工合同格式
- 2024企业租车服务合同
- 2024年学生贷款偿还协议
- 工程项目合作变更协议书
- 幼儿园劳动合同样本
- 建筑领域简易雇佣合同
- 劳动协商协议范本
- 2024打桩工程劳务合同范本
- 外汇借款合同书撰写指南
- 合作经营协议书范本编写技巧
- 幼儿园大班健康教案《养成好习惯》
- 古典概型与几何概型(文科)-2024高考数学复习含解析
- 房地产经营与管理-形考作业三-国开(HB)-参考资料
- 普法学法知识竞赛题库(完整版)
- 2024-2029年中国化妆品喷雾行业市场现状分析及竞争格局与投资发展研究报告
- 医德医风培训课件图文
- 三位数乘以三位数-计算题-竖式-50题-
- 保密宣传月新形势下的行政机关保密工作培训课件
- 剪映课件pptx-2024鲜版
- 农村自建房家装合同
- 战胜挫折主题班会教案
评论
0/150
提交评论