最短路径的DIJKSTRA算法及MATLAB程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

矩阵的 (i , j ) 位置上。 ( 表示无直接航路) ,请帮助该公司设计一张城市 c1 到其它城市间的 票价最便宜的路线图。
0 50 40 25 10 40 25 10 0 15 20 25 15 0 10 20 20 10 0 10 25 20 10 0 55 25 25 55 0 50
求第一个城市到其它城市的最短路径的 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); 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)<length(a) tb=find(pb==0); d(tb)=min(d(tb),d(temp)+a(temp,tb)); tmpb=find(d(tb)==min(d(tb))); temp=tb(tmpb(1)); pb(temp)=1; index1=[index1,temp]; index=index1(find(d(index1)==d(temp)-a(temp,index1))); if length(index)>=2 index=index(1); end index2(temp)=index; end d, index1, index2
两个指定顶点之间的最短路径 Байду номын сангаас题如下:给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找 一条最短铁路线。 以各城镇为图 G 的顶点,两城镇间的直通铁路为图 G 相应两顶点间的边,得图 G 。对
G 的每一边 e ,赋以一个实数 w( e) —直通铁路的长度,称为 e 的权,得到赋权图 G 。 G 的
解 用矩阵 a n n( n 为顶点个数) 存放各边权的邻接矩阵, 行向量 pb 、index1 、index 2 、
d 分别用来存放 P 标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分量 1 当第i顶点已标号 pb(i ) ; 0 当第i顶点未标号 index 2 (i ) 存放始点到第 i 点最短通路中第 i 顶点前一顶点的序号; d (i ) 存放由始点到第 i 点最短通路的值。
min {l ( v ), l (u ) w(uv )}
uSi
代替 l ( v ) 。计算 min{l ( v )} ,把达到这个最小值的一个顶点记为 ui 1 ,令 S i 1 S i {ui 1 } 。
vS i
(iii). 若 i | V | 1 ,停止;若 i | V | 1 ,用 i 1 代替 i ,转(ii)。 算法结束时,从 u0 到各顶点 v 的距离由 v 的最后一次的标号 l ( v ) 给出。在 v 进入 S i 之 前的标号 l ( v ) 叫 T 标号, v 进入 S i 时的标号 l ( v ) 叫 P 标号。算法就是不断修改各项点的 T 标号,直至获得 P 标号。若在算法运行过程中,将每一顶点获得 P 标号所由来的边在图上 标明,则算法结束时, u0 至各项点的最短路也在图上标示出来了。 例1 某公司在六个城市 c1 , c2 , L , c6 中有分公司,从 ci 到 c j 的直接航程票价记在下述
子图的权是指子图的各边的权和。 问题就是求赋权图 G 中指定的两个顶点 u 0 , v 0 间的具最小 权的轨。这条轨叫做 u 0 , v 0 间的最短路,它的权叫做 u 0 , v 0 间的距离,亦记作 d (u0 , v 0 ) 。 求最短路已有成熟的算法:迪克斯特拉(Dijkstra)算法,其基本思想是按距 u0 从近到 远为顺序,依次求得 u0 到 G 的各顶点的最短路和距离,直至 v0 (或直至 G 的所有顶点) , 算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该算法。 (i) 令 l (u 0 ) 0 ,对 v u0 ,令 l ( v ) , S 0 {u0 } , i 0 。 (ii) 对每个 v S i ( S i V \ S i ) ,用
相关文档
最新文档