欢迎来到天天文库
浏览记录
ID:62176204
大小:1.38 MB
页数:26页
时间:2021-04-20
《最新算法12--最短路径--弗洛伊德(Floyd)算法PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、算法12--最短路径--弗洛伊德(Floyd)算法2求最短路径步骤初始时设置一个n阶方阵,令其对角线元素为0,若存在弧,则对应元素为权值;否则为逐步试着在原直接路径中增加中间顶点,若加入中间点后路径变短,则修改之;否则,维持原值所有顶点试探完毕,算法结束3.Floyd算法思想:逐个顶点试探法从图的带权邻接矩阵G.arcs出发,假设求顶点Vi到Vj的最短路径。如果从Vi到Vj有弧,则从Vi到Vj存在一条长度为G.arcs[i][j]的路径,但该路径是否一定是最短路径,还需要进行n次试探。1.第一次,判别(Vi,V0)和(V0,Vj),即判别(Vi,V0,Vj)是
2、否存在,若存在,则比较(Vi,Vj)和(Vi,V0,Vj)的长度,取长度较短的为从Vi到Vj的中间顶点序号不大于0的最短路径。V2V3V0V112345689以D(1)为基础,以V2为中间顶点,求从Vi,到Vj的最短路径。或者为从Vi到Vj的边,或者为从Vi开始通过V0,V1,V2到达Vj的最短路径。D(2)[i][j]=min{D(1)[i][j],D(1)[i][2]+D(1)[2][j]}0123012301240092350801608888A(-1)=47A(0)=1036D(1)=D(2)=12910V0V1V201230123012400923508016088
3、88A(-1)=47A(0)=1036A(1)=D(2)=12910D(3)=V2V3V0V112345689以D(2)为基础,以V3为中间顶点,求从Vi,到Vj的最短路径。或者为从Vi到Vj的边,或者为从Vi开始通过V0,V1,V2,V3到达Vj的最短路径。D(3)[i][j]=min{D(2)[i][j],D(2)[i][3]+D(2)[3][j]}9118V3V2V0V1D(3)[i][j]即为从Vi到Vj的最短路径长度.9ACB264311041160230初始:路径:ABACBABCCA046602370加入B:路径:ABABCBABCCACAB041160237
4、0加入A:路径:ABACBABCCACAB046502370加入C:路径:ABABCBCABCCACAB例题:10例ACB264311初始:041160230length=011202300path=加入A:0411602370length=011202310path=加入B:046602370length=012202310path=加入C:046502370length=012302310path=114.论点:A(-1)[i][j]是从顶点vi到vj,中间顶点是v1的最短路径的长度,A(k)[i][j]是从顶点vi到vj,中间顶点的序号不大于k的最短路径的长度,A(n
5、-1)[i][j]是从顶点vi到vj的最短路径长度。证明:归纳证明,始归纳于s(上角标);(1)归纳基础:当s=-1时,A(-1)[i][j]=Edge[i][j],vi到vj,不经过任何顶点的边,是最短路径。(2)归纳假设:当s6、最短路径(标号不高于k-1);A(k-1)[i][k]:是i到k的最短路径(标号不高于k-1);A(k-1)[k][j]:是k到j的最短路径(标号不高于k-1);所以:A(k)[i][j]是i到j的最短路径(标号不高于k)。13图用邻接矩阵存储edge[][]存放最短路径长度path[i][j]是从Vi到Vj的最短路径上Vj前一顶点序号5.算法实现voidfloyd(){for(inti=0;i7、不经过任何顶点for(intk=0;k
6、最短路径(标号不高于k-1);A(k-1)[i][k]:是i到k的最短路径(标号不高于k-1);A(k-1)[k][j]:是k到j的最短路径(标号不高于k-1);所以:A(k)[i][j]是i到j的最短路径(标号不高于k)。13图用邻接矩阵存储edge[][]存放最短路径长度path[i][j]是从Vi到Vj的最短路径上Vj前一顶点序号5.算法实现voidfloyd(){for(inti=0;i7、不经过任何顶点for(intk=0;k
7、不经过任何顶点for(intk=0;k
此文档下载收益归作者所有