收藏 分享(赏)

数据结构.ppt

上传人:天天快乐 文档编号:1363674 上传时间:2018-07-04 格式:PPT 页数:81 大小:1.46MB
下载 相关 举报
数据结构.ppt_第1页
第1页 / 共81页
数据结构.ppt_第2页
第2页 / 共81页
数据结构.ppt_第3页
第3页 / 共81页
数据结构.ppt_第4页
第4页 / 共81页
数据结构.ppt_第5页
第5页 / 共81页
点击查看更多>>
资源描述

1、1,第七章 图,7.1 图的定义和术语7.2 图的存储结构7.3 图的遍历7.4 图的连通性问题7.5 有向无环图及其应用7.6 最短路径,2,7.1图的定义和术语,抽象数据类型图的定义: ADT graph 数据对象V: V是具有相同特性的数据元素的集合,称为顶点集。 数据关系R: R=VR VR=|v,wV且P(v,w),表示从v到w的 弧,谓词P(v,w)定义了弧的意义或信息 基本操作P:. / ADT graph,3,顶点,图中的数据元素。,弧,若VR,则表示从v到w的一条弧。称v为弧尾或初始点,称w为弧头或终端点,此时的图称为有向图。,边,若VR必有VR,则以无序对(v,w)代替这两

2、个有序对,表示v和w的一条边。此时的图称为无向图。,4,例:,(a)有向图G1,(b)无向图G2,G1的定义: G1=(V1,A1)其中: V1=v1,v2,v3,v4 A1=, ,G2的定义: G2=(V2,E2)其中:V2=V1,V2,V3,V4,v5 E2=(v1,v2),(v1,v4),(v2,v3), (v2,v5),(v3,v4),(v3,v5),5,设n表示图中结点数;e表示边或弧的数目。则:(1)在无向图中,e的取值范围是0n(n-1)/2;,例:,证: e的最大值 =(n-1)+(n-2)+1+0 =n(n-1)/2,在无向图中,如有n(n-1)/2条边,则称为完全图。,例:

3、,6,(2)在有向图中,e的取值范围是0n(n-1);,例:,证: e的最大值 =(n-1)+(n-1)+(n-1) =n(n-1),在有向图中,如有n(n-1)条弧,则称为有向完全图。,例:,有很少条边或弧的图称为稀疏图,反之称为稠密图。,7,权,图的边或弧具有与它相关的数。,网,带权的图 。,例:,子图,假设有两个图G=(V,E)和G=(V,E),如果 且 ,则称G为G的子图。,例:图P的子图:,1,8,例:,判定哪些为它的子图:,9,邻接点,在无向图G=(V,E)中,如果边(v,v)E,则称顶点v和v互为邻接点,即v和v相邻接。边(v,v)依附于顶点v和v,或者说边(v,v)和顶点v和v

4、相关联。,顶点的度,指和该顶点相关联的边的数目,记为: TD(V)。,例:,顶点v1与v2相邻接。顶点v1与v2互为邻接点。边(v1,v2)依附于顶点v1和v2。顶点v1的度为2。顶点v3的度为3。,10,邻接到/自,在有向图G=(V,A)中,如果弧A,则称顶点v邻接到顶点v,顶点v邻接自顶点v。弧和顶点v和v相关联。,顶点的入度,以该顶点为头的弧的数目,记为: ID(V)。,例:,顶点的出度,以该顶点为尾的弧的数目,记为: OD(V)。,顶点的度,TD(v)=ID(v)+OD(v),弧和顶点v1和v3相关联。顶点v1邻接到顶点v3。顶点v1邻接到顶点v2。顶点v3邻接自顶点v1。,顶点v1的

5、入度为1。顶点v1的出度为2。顶点v1的度为3。,11,一般地,如果顶点vi的度记为TD(vi),那么一个有n个顶点,e条边或弧的图,满足如下关系:,例:,验证: e=1/2(2+3+3+2+2)=6 e=1/2(3+1+2+2)=4,12,在无向图G=(V,E)中,从顶点v到顶点v的路径是一个顶点序列(v=vi0,vi1,vim=v),其中(vij-1,vij) E,1=j=m。,路径,在有向图G=(V,A)中,从顶点v到顶点v的路径是一个顶点序列(v=vi0,vi1,vim=v),其中A,1=j=m。,路径的长度,路径上边或弧的数目。,例:,顶点v1到v5的路径为: (v1,v2,v5)

6、,长度为2; (v1,v2,v3,v5),长度为3;,顶点v1到v4的路径为:(v1,v2,v4) ,长度为2; (v1,v3,v4),长度为2;,13,回路或环,第一个顶点和最后一个顶点相同的路径。,简单路径,路径中序列顶点不重复出现的路径。,除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路。,简单回路(简单环),例:,路径(v1,v2,v4,v1)是回路、简单回路。路径(v1,v2,v4,v1,v3)不是简单路径。路径(v1,v3,v4)是简单路径。,连通,在无向图G中,如果从顶点v到顶点v有路径,则称v 和v是连通的。,连通图,在无向图G中,如果对于图中任意两个顶点vi,vjV

7、,vi与vj都是连通的,则G为连通图.,14,连通分量,无向图中的极大连通子图。,例:,v1与v2、v1与v3 、v1与v4、v1与v5v2与v3、v2与v4、 v2与v5 v3与v4 v3与v5 v4与v5都是连通的,此图是连通图。,v1与v3、v7 v2与v3、v7 v4与v3、v7 v5与v3、v7 v6与v3、v7不连通,此图不是连通图,它的连通分量为:,15,强连通图,在有向图G中,如果对于每一对vi,vjV,vivj,从vi到vj和vj到vi都存在路径,则G为强连通图.,强连通分量,有向图中的极大强连通子图。,例:,不是强连通图,它的强连通分量为:,是强连通图,2,16,顶点在图中

8、的位置,指该顶点在一个人为的随意排列中的位置(或序号)。,例:,v1v2v3v4v5v5v3v4v1v2 ,顶点的邻接点的次序,对该顶点的所有邻接点进行排列。,17,图的基本操作:(1)locatever(G,u) 顶点定位函数。,例:,图按v2v3v4v5v1v6人为排列,Locatever(G,v3)=1,(2)firstadjvex(G,v) 求第一个邻接点函数。,例:,Firstadjvex(G,v2)=v1,顶点v2的邻接点按v1v3v5排列,Firstadjvex(G,v6)=null,18,(3)nextadjvex(G,v,w) 求下一邻接点函数。,例:,Nextadjvex(

9、G,v2,v3)=v5,顶点v2的邻接点按v1v3v5排列,Nextadjvex(G,v2,v5)=null,(4)insertvex(&G,u) 插入顶点操作。,例:,Insertvex(G,v6),(5)insertarc(&G,v,w) 插入弧/边的操作。,例:,Insertarc(G,v5,v6)Insertarc(G,v2,v6),19,(6)deletevex(&G,v) 删除顶点操作。,例:,Deletevex(G,v4),(7)deletearc(&G,v,w) 删除弧/边操作。,例:,Deletearc(G,v1,v4),20,7.2 图的存储结构,图的多重链表:,常用的存储

10、结构:数组表示法 邻接表、邻接多重表、十字链表,图的顺序存储结构:无,21,7.2.1 数组表示法,用两个数组分别存储数据元素(顶点)的信息和数据元素之间的关系(边或弧)的信息。,顶点:,一维数组,弧或边:,二维数组,22,C表示:,#define INFINITY INT_MAX /最大值无穷大#define MAX_VERTEX_NUM 20 /最大顶点个数typedef enumDG,DN,AG,AN GraphKind; /有向图,有向网,无向图,无向网typedef struct ArcCell VRType adj; InfoType *info; /该弧相关信息的指针ArcCel

11、l,AdjMatrixmax_vertex_nummax_vertex_num;tpyedef struct VertexType vexsMAX_VERTEX_NUM; /顶点向量 AdjMatrix arcs; /邻接矩阵 int vexnum,arcnum; /图的当前顶点数和弧数 GraphKind kind; /图的种类标志MGraph;,23,例:,数组表示法存储该图:,Mgraph a;,a.vexs0=A;a.vexs1=B;a.vexs2=C;a.vexs3=D;,a.arcs00.adj=0a.arcs01.adj=1a.arcs33.adj=0;,a.vexnum=4;a

12、.arcnum=4;,a.kind=DG;,24,例:,数组表示法存储该图:,Mgraph a;,a.vexs0=1;a.vexs1=2;a.vexs2=3;a.vexs3=4;a.vexs4=5;,a.arcs00.adj=0a.arcs01.adj=1a.arcs44.adj=0;,a.vexnum=5;a.arcnum=6;,a.kind=UDG;,25,例:, 5 7 4 8 9 5 6 5 3 1 ,网的邻接矩阵:,Aij.adj=,wij 若或(vi,vj)VR 反之,26,例:,数组表示法存储该图:,Mgraph a;,a.vexs0=v1;a.vexs1=v2;.a.vexs5

13、=v6;,a.arcs00.adj= INFINITY ;a.arcs01.adj=5;a.arcs55.adj= INFINITY;,a.vexnum=6;a.arcnum=10;,a.kind=DN;, 5 7 4 8 9 5 6 5 3 1 ,27,在邻接矩阵中易判定任意两个顶点之间是否有边/弧,并易求得各个顶点的度:,(1)在有向图中,第i行的元素之和为顶点vi的出度OD(vi); 第i列的元素之和为顶点vi的入度ID(vi)。,例:,A1=,OD(v1)=2ID(v1)=1OD(v3)=1ID(v3)=1,(2)在无向图中,第i行(或第i列)的元素之和为顶点vi的度TD(vi)。,例

14、:,A2=,TD(v1)=2TD(v5)=2,28,建立无向网的数组存储结构的算法:,算法的时间复杂度: O(n*n+en),Status createudn(mgraph ,有向网?无向图?有向图?,29,(1)locatevex(G,v) 顶点定位函数。(2)first adj(G,v) 求第一个邻接点函数。(3)next adj(G,v,w) 求下一邻接点函数。,以数组作为存储结构,图的三种基本操作的实现:,例:,0 1 1 00 0 0 00 0 0 11 0 0 0,G.vexs,G.arcs,30,例树T:,孩子链表:,7.2.2 邻接表,31,邻接表是图的一种链式存储结构。在邻接

15、表中,对图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对有向图是以顶点vi为尾的弧) 。每个链表附设一个表头结点,在表头结点中除了指针域外,还存储顶点的有关信息。,32,结点结构:,邻接点域:指示与顶点vi邻接的点在图中的位置。链域:指示下一条边或弧的结点。数据域:存储和边或弧相关的信息。,表头结点结构:,数据域:存储顶点vi及与顶点有关的其它信息。链域:指示链表中第一个结点。,33,例:,34,C表示:,#define MAX_VERTEX_NUM 20typedef struct ArcNode int adjvex; /该弧所指向的顶点的位置 struct Ar

16、cNode *nextarc; /指向下一条弧的指针 InfoType *info; /该弧相关信息的指针 ArcNode;typedef struct VNode VertexType data; /顶点信息 ArcNode *firstarc; /指向第一条依附该顶点的弧的指针 VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vertices; int vexnum,arcnum; /图的当前顶点数和弧数 int kind; /图的种类标志 ALGraph;,35,(1)在无向图中,第i个链表中的结点数为顶点vi的度TD(vi);,例:

17、,TD(v1)=TD(v2)=TD(v3)=TD(v4)=TD(v5)=,23322,在邻接表中求各个顶点的度:,36,(2)在有向图中,例:,OD(v1)=ID(v1)=OD(v2)=ID(v2)=,2,1,0,1,OD(v3)=ID(v3)=OD(v4)=ID(v4)=,1111,第i个链表的结点数是顶点vi的出度OD(vi);所有链表中其邻接点域值为i的结点的个数是顶点vi的的入度ID(vi);,37,在有向图中,为了便于确定顶点的入度,可建立有向图的逆邻接表:,例:,TD(v1)=OD(v1)+ID(v1)=2+1=3TD(v4)=OD(v4)+ID(v4)=1+1=2,38,课堂练习

18、:画出下图的邻接矩阵和邻接表。,0 1 0 1 00 0 1 0 00 0 0 0 00 1 0 0 01 0 1 0 0,邻接表:,39,7.3 图的遍历,图的遍历,从图中某一顶点出发访问图中其余顶点,且使每一个顶点仅被访问一次。,为了避免同一顶点被访问多次,在遍历图的过程中,设一个辅助数组: visited0.n-1,visitedi 初值为false,visitedi 已被访问值为true,常用的图的遍历方法: (1)深度优先搜索 (2)广度优先搜索,40,7.3.1 深度优先搜索,深度优先搜索算法:,(1)从图中某个未被访问的顶点出发,访问该顶点。(2)然后依次从该顶点的未被访问的邻接

19、点出发深度 优先遍历图。(3)若此时图中尚有顶点未被访问,则另选图中一个 未被访问的顶点作为起始点,重复(1)、(2), 直到图中所有顶点都被访问到为止。,例:,深度优先搜索访问序列:,1,2,3,4,5,2,1,4,3,5,41,深度优先搜索访问序列:,1,2,3,4,1,3,4,2,深度优先搜索访问序列:,1,2,5,6,4,3,7,如果给出图的存储结构和起始点,则访问序列是唯一确定的:,例:,深度优先搜索访问序列:,42,深度优先搜索的过程:,例:,43,图的深度优先遍历:,v1的邻接点:v2、v3v2的邻接点:v1、v4、v5 v3的邻接点:v1、v6、v7v4的邻接点:v2、v8v5

20、的邻接点:v2、v8v6的邻接点:v3、v7,v7的邻接点:v3、v6v8的邻接点:v4、v5,44,图的深度优先遍历算法:,Boolean visitedMAX;Void dfstraverse(graph G) For (v=0;v=0; w=nextadjvex(G,v,w) if (!visitedw) dfs(G,w);,45,dfs(g,0),Visited0=true;Print(A)for w=1; if dfs(g,1); w=3; if w=-1;,Visited1=true;Print(B)for w=0; if w=2;if dfs(g,2); w=4 if w=-1;

21、 ,Visited2=true;Print(C)for w=1; if w=3;if dfs(g,3); w=4;if dfs(g,4); w=-1; ,Visited3=true;Print(D)for w=0; if w=2; if w=-1;,Visited4=true;Print(E)for w=1; if w=2; if w=-1;,46,7.3.2 广度优先搜索,广度优先搜索算法:,(1)从图中某个未被访问的顶点出发,访问该顶点。(2)然后依次访问该顶点的各个未曾被访问的邻接点, 然后分别从这些邻接点出发广度优先遍历图,直到 图中所有已被访问的顶点的邻接点都被访问到。(3)若此时图

22、中尚有顶点未被访问,则另选图中一个 未被访问的顶点作为起始点,重复(1)、(2), 直到图中所有顶点都被访问到为止。,47,例:,广度优先搜索访问序列:,1,2,4,3,5,2,1,3,5,4,广度优先搜索访问序列:,1,2,4,5,6,3,7,48,图的广度优先遍历:,v1的邻接点:v2、v3v2的邻接点:v1、v4、v5 v3的邻接点:v1、v6、v7v4的邻接点:v2、v8v5的邻接点:v2、v8v6的邻接点:v3、v7,v7的邻接点:v3、v6v8的邻接点:v4、v5,49,广度优先遍历算法实现:,A,B,D,C,E,Void bfstraverse(graph G) For (v=0

23、;v=0; w=nextadjvex(G,u,w) if (!visitedw) visitedw=true; visit(w); enqueue(Q,w); ,50,结论:设E为连通图G的所有边的集合,则从图中任一顶点出发遍历图时,必将E分为两个集合T和B,其中T为遍历经过的边的集合,B为剩余的边的集合.则T和图G中的所有顶点一起构成连通图的一棵生成树.,7.4图的连通性问题,7.4.1无向图的生成树,连通图的生成树,是连通图的一个极小连通子图,它含有图中全部顶点,但只有足以构成一棵树的n-1条边。,例:,生成树,51,例:,深度优先搜索遍历:,12345,经过的边的集合:,(1,2), (

24、2,3), (3,4), (3,5),深度优先生成树,广度优先搜索遍历:,12435,经过的边的集合:,(1,2), (1,4), (2,3), (2,5),广度优先生成树,52,7.4.3 最小生成树,可有n(n-1)/2条线路,选择n-1条,使总费用最小,构造连通网的最小代价生成树(最小生成树)问题,构造最小生成树的常用算法: (1)普里姆(Prim)算法 (2)克鲁斯卡尔(Kruskal)算法,53,1、普里姆(Prim)算法,假设N=(V,E)是连通网,TE是N上最小生成树中边的集合.,(1)U=u0 , TE= 其中u0V;(2)在顶点uU和顶点vV-U的所有边(u,v)中找一 条代

25、价最小的边(u0,v0)并入集合TE,同时v0并 入U;(3)重复(2),直到U=V为止。此时TE必有n-1条边, 则T=(V,TE)为N的最小生成树;,54,例:,构造最小生成树,U=1 ,V-U=2,3,4,5 ,TE=,1,U=1,2 ,V-U=3,4,5 TE=(1,2),1,2,3,U=1,2,4 ,V-U=3,5 TE=(1,2),(1,4),4,5,U=1,2,4,5 ,V-U=3 TE=(1,2),(1,4),(2,5),5,5,U=1,2,4,5,3 ,V-U= TE=(1,2),(1,4),(2,5),(5,3),3,2,逻辑算法,55,普里姆(Prim)一级算法:,设置一

26、个辅助数组closedge0.n-1,它有两个分量vex和lowcost.对于每个顶点viV-U: closedgei.lowcost表示:顶点vi到U中所有顶点具有的最 小权值边的权值; closedgei.vex表示:这条边依附在U中的顶点;,例:,U=v0 ,V-U=v1,v2,v3,v4 TE=,closedge1.lowcost=closedge1.vex=closedge2.lowcost=closedge2.vex=,3,v0,56,例:,v0,3,v0,5,v0,v1,v2,v3,v4,v0,v1,3,0,v1,6,v0,5,v1,5,v3,5,0,v0,v1,v3,v2,v4

27、,0,v1,6,v1,5,v4,5,0,v0,v1,v3,v4,v2,0,v4,2,0,v2,2,0,v0,v1,v3,v4,v2,0,0,0,1,3,4,2,57,(选学)普里姆(Prim)二级算法:,Proc minispantree_prim(gn:adjmatrix; u0:1.n); for v:=1 to n do if vu0 then 【closedgev.vex:=u0; closedgev.lowcost:=gnu0,v】; closedgeu0.lowcost:=0; for i:=1 to n-1 do 【k:=minimum(closedge); write(clos

28、edgek.vex,k); closedgek.lowcost:=0; for v:=1 to vtxnum do if gnk,vclosedgev.lowcost then 【closedgev.lowcost:=gnk,v;closedgev.vex:=k】 】Endp;minispantree,时间复杂度:O(n*n),58,2、克鲁斯卡尔(Kruskal)算法,(1)设T=(V,)为含n个结点而无边的非连通图,图中每 个顶点自成一个连通分量.(2)在E中选择代价最小的边,若该边依附的顶点落在T 中不同的连通分量上,则将此边加入到T中,否则舍去 此边.(3)重复(2),直到T中所有顶点

29、都在同一连通分量上 为止。则T为N的最小生成树;,假设N=(V,E)是连通网.,59,例:,构造最小生成树,T=(1,2,3,4,5,),T=(1,2,3,4,5,(3,5),2,T=(1,2,3,4,5,(3,5),(1,2),3,T=(1,2,3,4,5,(3,5),(1,2),(1,4),(2,5),5,T=(1,2,3,4,5,(3,5),(1,2),(1,4),5,逻辑算法,60,例:,构造最小生成树,1,2,3,4,5,T=(1,2,3,4,5,6,),T=(1,2,3,4,5,6,(1,3),T=(1,2,3,4,5,6,(1,3),(4,6),T=(1,2,3,4,5,6, (

30、1,3),(4,6),(2,5),T=(1,2,3,4,5,6, (1,3),(4,6),(2,5),(3,6),T=(1,2,3,4,5,6, (1,3),(4,6),(2,5),(3,6),(2,3),61,7.5有向无环图及其应用,有向无环图(DAG),无环的有向图。,directed acycline graph,有向树、有向图、有向无环图的区别:,有向无环图的应用: (1)作为描述含有公共子式的表达式的工具; (2)作为描述一项工程或系统的进行过程的工具;,62,1、描述含有公共子式的表达式,例:表达式: (a-b)*(a+b)*b)+(a-b)-(a+b)*b,用二叉树描述:,63

31、,用有向无环图描述:,表达式: (a-b)*(a+b)*b)+(a-b)-(a+b)*b,64,2、描述一项工程或系统的进行过程,例:某一项工程的流程图,对于此工程,我们关心的两个问题是: (1)工程是否能顺利进行(判定有向图是否有环)。 (2)估算整个工程完成所必须的最短时间。对应于有向图,即为以下两个问题: (1)对有向图进行拓朴排序。 (2)求有向无环图的关键路径。,65,7.5.1 拓朴排序,拓朴排序,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称为拓朴排序。,偏序,指集合中仅有部分成员之间可比较。,全序,指集合中全体成员之间均可比较。,例:,设图中弧表示xy,则左图表示偏序

32、,右图表示全序.,66,拓朴排序,偏序、全序、拓朴排序在工程或系统问题中的应用:,(1)用一个偏序的有向图来表示一个流程图。(2)图中顶点表示活动,用弧表示活动间的优先关系。 这种以顶点表示活动的有向图被称为AOV-网。(3)在网中,若从顶点i到顶点j有一条有向路径,则i 是j的前驱, j是i的后继;若是网中一条弧,则i 是j的直接前驱,j是i的直接后继。,67,例:计算机软件专业学生的必修课程关系如下表:,表示课程间优先关系的有向图,68,判定AOV-网中是否存在环的方法:,对有向图构造其顶点的拓朴有序序列,若网中所有顶点都在它的拓朴有序序列中,则该网中必不存在环,反之则网中存在环。,例:,

33、进行拓朴排序的方法:,(1)在有向图中选一个没有前驱的顶点且输出之。(2)从图中删除该顶点和所有以它为尾的弧。(3)重复(1)、(2)直至全部顶点都输出或当前图中 不存在无前驱的顶点为止。,拓朴有序序列:,1,2,3,5,4,结论:网中所有顶点都在此拓朴有序序列中,所以该网不存在环,69,例:,拓朴有序序列:,1,2,结论:该网存在环,拓朴有序序列:,1,2,结论:该网不存在环,3,4,5,1,2,4,3,5,例:,拓朴有序序列:,c1c2c3c4c5c7c9c10c11c6c12c8,结论:该网不存在环,70,7.5.2 关键路径,AOV-网:,1、工程是否能顺利进行?,2、整个工程完成所必

34、须的最短时间?,71,AOE_网,一种用边表示活动的带权有向无环图。,在网中:(1)顶点表示事件。 (2)弧表示活动。 (3)权表示活动持续的时间。,例:,(1)有事件 v1,v2,v3,v9。 每个事件表示:在它之前的活动已完成,在它之后的活动可以开始。(2)有活动a1,a2,a11。(3)活动持续的时间为6、4、5。,72,AOV-网:,AOE_网,73,在AOE_网中,我们关心的问题是:(1)完成整项工程至少需要多少时间?(2)哪些活动是影响工程进度的关键?,完成工程的最短时间=,从开始点到完成点的最长路径的长度。,例:,路径(v1,v2,v5,v8,v9)是关键路径,长度为18。路径(

35、v1,v2,v5,v7,v9)是关键路径,长度为18。,影响工程进度的关键是:,关键路径上的活动。,例:,关键活动:a1, a4, a8, a11, a7, a10。,74,总结:,有向图,工程是否能顺利进行,拓扑排序,有向网,AOV图,(1)完成整项工程至少需要多少时间?(2)哪些活动是影响工程进度的关键?,关键路径、关键活动,AOE网,75,7.6 最短路径,1.问题的提出,15个城市的交通网,满足旅客的各种要求:(1)A城到B城的中转次数最少的路线。(2)A城到B城的费用最少的路线。,76,2、求A城到B城的中转次数最少路线的算法。,(1)从顶点A出发对图作广度优先搜索,一旦遇到 顶点B

36、就终止。(2)在由此得到的广度优先生成树上,从A到B的路 径就是中转次数最少路线。,例:,v3到v4的中转次数最少的路线:,(v3,v1,v2,v4),77,7.6.1 从某个源点到其余各顶点的最短路径,例:,无 (v0,v2) 10(v0,v4,v3) 50(v0,v4) 30(v0,v4,v3,v5) 60,迪杰斯特拉(Dijkstra)算法思想:,按路径长度递增的次序产生最短路径.,算法的一级实现:,辅助数组D0.n-1,Di: 表示当前所找到的从始点v到终点vi的最短路径的长度.,78,算法的二级实现: (用邻接矩阵arcs来存储有向网的弧)(1) S:表示已找到从v出发的最短路径的终

37、点的集合; Di:表示当前所找到的从v到终点vi的最短路径的长度. S=v; Di=arcsLocate-vex(G,v)i viV(2)选择vj, 使得 Dj=minDi| viV-S 令 S=Sj(3)修改从v出发到集合V-S上任顶点Vk可达的最短路径长度. if Dj+arcsj,kDk Dk=Dj+arcsjk(4)重复(2)、(3)共n-1次; 即可求得从v到图上其余各顶点的最短路径.,79,例:,v0,10,(v0,v2),30,(v0,v4),100,(v0,v5),v0,v2,60,(v0,v2,v3),30,(v0,v4),100,(v0,v5),v0,v2,v4,50,(v0,v4,v3),90,(v0,v4,v5),v0,v2,v4,v3,60,(v0,v4,v3,v5),v0,v2,v4,v3,v5,80,算法7.15 P189,时间复杂度为:O(n*n),81,图的小结:,图的存储结构,数组表示法邻接表十字链表邻接多重表,图的遍历,深度优先遍历广度优先遍历,图的应用,最小生成树,Primkruskal,拓扑排序,关键路径,最短路径,DijkstraFloyd,无向网,有向图,有向网,有向网,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报