2022年最小生成树最短路径算法定义 .pdf
《2022年最小生成树最短路径算法定义 .pdf》由会员分享,可在线阅读,更多相关《2022年最小生成树最短路径算法定义 .pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、假设图G权的邻接矩阵为0A,nnnnnnaaaaaaaaaA2122221112110来存放各边长度,其中:0iiani,2,1;ijaji,之间没有边,在程序中以各边都不可能达到的充分大的数代替;ijijwaijw是ji,之间边的长度,nji,2,1,。对于无向图,0A是对称矩阵,jiijaa。Floyd 算法的基本思想是:递推产生一个矩阵序列nkAAAA,10,其中),(jiAk表示从顶点iv到顶点jv的路径上所经过的顶点序号不大于k的最短路径长度。计算时用迭代公式:),(),(),(min(),(111jkAkiAjiAjiAkkkkk是迭代次数,nkji,2,1,。最后,当nk时,nA
2、即是各顶点之间的最短通路值。例10 用 Floyd算法求解例 1。矩阵 path 用来存放每对顶点之间最短路径上所经过的顶点的序号。Floyd 算法的 Matlab程序如下:clear;clc;M=10000;a(1,:)=0,50,M,40,25,10;a(2,:)=zeros(1,2),15,20,M,25;a(3,:)=zeros(1,3),10,20,M;a(4,:)=zeros(1,4),10,25;a(5,:)=zeros(1,5),55;a(6,:)=zeros(1,6);b=a+a;path=zeros(length(b);for k=1:6 for i=1:6 for j=1
3、:6 if b(i,j)b(i,k)+b(k,j)名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 10 页 -b(i,j)=b(i,k)+b(k,j);path(i,j)=k;end end end end b,path Floyd 最短路算法的MATLAB程序%floyd.m%采用 floyd 算法计算图a中每对顶点最短路%d 是矩离矩阵%r 是路由矩阵function d,r=floyd(a)n=size(a,1);d=a;for i=1:n for j=1:n r(i,j)=j;end end r for k=1:n for i=1:n for j=1:n if d(i,k
4、)+d(k,j)d(i,j)d(i,j)=d(i,k)+d(k,j);r(i,j)=r(i,k)end end end k d r end 两个指定顶点之间的最短路径问题如下:给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。以各城镇为图G的顶点,两城镇间的直通铁路为图G相应两顶点间的边,得图G。对G的每一边e,赋以一个实数)(ew直通铁路的长度,称为e的权,得到赋权图G。G的子图的权是指子图的各边的权和。问题就是求赋权图G中指定的两个顶点00,vu间的具最小名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 10 页 -权的轨。这条轨叫做00,vu间
5、的最短路,它的权叫做00,vu间的距离,亦记作),(00vud。求最短路已有成熟的算法:迪克斯特拉(Dijkstra)算法,其基本思想是按距0u从近到远为顺序,依次求得0u到G的各顶点的最短路和距离,直至0v(或直至G的所有顶点),算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该算法。(i)令0)(0ul,对0uv,令)(vl,00uS,0i。(ii)对每个iSv(iiSVS),用)()(),(minuvwulvliSu代替)(vl。计算)(minvliSv,把达到这个最小值的一个顶点记为1iu,令11iiiuSS。(iii).若1|Vi,停止;若1|Vi,用1i代替i,转
6、(ii)。算法结束时,从0u到各顶点v的距离由v的最后一次的标号)(vl给出。在v进入iS之前的标号)(vl叫 T 标号,v进入iS时的标号)(vl叫 P 标号。算法就是不断修改各项点的T标号,直至获得P 标号。若在算法运行过程中,将每一顶点获得P 标号所由来的边在图上标明,则算法结束时,0u至各项点的最短路也在图上标示出来了。例 9 某公司在六个城市621,ccc中有分公司,从ic到jc的直接航程票价记在下述矩阵的),(ji位置上。(表示无直接航路),请帮助该公司设计一张城市1c到其它城市间的票价最便宜的路线图。0552525105501020252510010204020100152520
7、15050102540500用矩阵nna(n为顶点个数)存放各边权的邻接矩阵,行向量pb、1index、2index、d分别用来存放P标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分量顶点未标号当第顶点已标号当第iiipb01)(;)(2iindex存放始点到第i点最短通路中第i顶点前一顶点的序号;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 10 页 -)(id存放由始点到第i点最短通路的值。求第一个城市到其它城市的最短路径的Matlab 程序如下:clear;clc;M=10000;a(1,:)=0,50,M,40,25,10;a(2,:)=zeros(1,2),
8、15,20,M,25;a(3,:)=zeros(1,3),10,20,M;a(4,:)=zeros(1,4),10,25;a(5,:)=zeros(1,5),55;a(6,:)=zeros(1,6);a=a+a;pb(1:length(a)=0;pb(1)=1;index1=1;index2=ones(1,length(a);d(1:length(a)=M;d(1)=0;temp=1;while sum(pb)=2 index=index(1);end index2(temp)=index;endd,index1,index2 4.2.1prim 算法构造最小生成树设置两个集合P和Q,其中P用
9、于存放G的最小生成树中的顶点,集合Q存放G的最小生成树中的边。令集合P的初值为1vP(假设构造最小生成树时,从顶点1v出发),集合Q的初值为Q。prim 算法的思想是,从所有Pp,PVv的边中,选取具有最小权值的边pv,将顶点v加入集合P中,将边pv加入集合Q中,如此不断重复,直到VP时,最小生成树构造完毕,这时集合Q中包含了最小生成树的所有边。prim 算法如下:(i)1vP,Q;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 10 页 -(ii)while VP,m i n(PVvPpwpvpvvPP pvQQend 例 11 用 prim 算法求右图的最小生成树。我们用nr
10、esult3的第一、二、三行分别表示生成树边的起点、终点、权集合。Matlab程序如下:clc;clear;M=1000;a(1,2)=50;a(1,3)=60;a(2,4)=65;a(2,5)=40;a(3,4)=52;a(3,7)=45;a(4,5)=50;a(4,6)=30;a(4,7)=42;a(5,6)=70;a=a;zeros(2,7);a=a+a;a(find(a=0)=M;result=;p=1;tb=2:length(a);while length(result)=length(a)-1 temp=a(p,tb);temp=temp(:);d=min(temp);jb,kb=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年最小生成树最短路径算法定义 2022 最小 生成 树最短 路径 算法 定义
限制150内