DJ算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DJ算法

最短路的算法 一、最短路的算法 在图G中,给定和两个顶点。从到可以有多条路径,从这多条路径中找出长度最小的路,这样的路称为从到的最短路。设每条弧的长度均为非负值。 下面的算法是由狄克斯特拉(Dijkstra,1959)提出的,其想法是:设已知图中最接近于顶点s好m个顶点以及从顶点s到这些顶点中每一个顶点的最短路(从s到其本身的最短路是零路,即没有弧的路,其长度为0)。对顶点s和这m个顶点着色。然后最接近于s的第m+1个顶点如下求之: 对于每一个着色的顶点y,考虑所有已着色顶点x,把弧(x,y)接在从s到x的最短路后面,这样就得到从s到y的m条不同的路。从这m条不同的路中选出最短路,它就是s到y的最短路。相应的y点就是最接近于s的第m+1个顶点。因为所有弧的长度都是非负的,所以从s到最接近于s的第m+1个顶点的最短路必然只使用自己着色的顶点作为中间顶点。 从m=0开始,将这个过程重复进行下去,直至求得从s到t的最短路为止。 狄克斯特拉最短路算法 第一步,开始,所有弧和顶点都为着色。对每一个顶点x指定一个数d(x),d(x)表示从s到x的最短的长度(中间顶点均已着色)。开始时,令,(对所有)。y表示已着色的最后一个顶点。对始点s着色,令。 第二步,对每一个未着色的顶点x,重新定义如下: 对于所有未着色顶点x,如,则算法终止。因为此时从s到任一未着色的点都没有路。否则,对具有的最小值的为着色顶点x进行着色。同时把弧着色(指向顶点x的弧只有一条被着色)。令。 第三步,若干顶点t已着色,则算法终止。这时已找到一条从s到t的最短路。如果t未着色,则转第二步。 主意:已着色的弧不能构成一个圈,而是构成一个根在s的树形图,此树形图称为最短路树形图。若x是最短路树形图的中的任一顶点,则从s到x的唯一的一条路是从s到x的最短路。 这个算法可以看成是根在顶点s的树形图的生长过程。一旦达到顶点t,生长过程就停止。如果要确定从顶点s到图中所有其它顶点的最短路,则生长过程要继续下去,直至所有顶点都包含在最短路树形图内为止。此时要如何修改算法? 例 给定有向图如图1所示,用DJ算法找出从s到t的最短路。 第一步,开始只有s着色,,而且对于所有,。 第二步, 由于是最小值,所以对c点着色,并对确定的弧着色。当前的最短路树形图由弧组成,如图2。 第三步,顶点t为着色,返回第二步。 第二步 由于是最小值,所以对顶点a着色,并确定的弧着色。现有的最短路由和组成,见图3。 第三步,t为着色,返回第二步。 第二步, 最小,对d着色,确定的弧有两条,即和,可任选其中一条,对其着色,这里选。这样,现有的最短路树形图由弧、、组成,如图4。 第三步,t未着色,返回第二步。 第二步, 是最小值,对点b着色,对确定的弧进行着色。现有最短路树形图由弧、、和组成,见图5。 第三步,t为着色,返回第二步。 第二步, 对t及着色。最终的最短路树形图由弧、、、和组成,见图6。 从s到t的最短路由弧、、组成,其长度为3+3+2=8。这条最短路不是唯一的。 例3.5(最短路问题) 在纵横交错的公路网中,货车司机希望找到一条从一个城市到另一个城市的最短路,假设图7所示为公路网。节点表示货车可以停靠的城市,弧上的权值表示城市之间的距离(百公里)。那么货车从城市S出发到城市T,如何选择行使路线,使所经过的路程最短? 可以把S到T的行使过程分为4个阶段: 记为城市到城市的距离,若两城市没有路相连,则;表示城市到城市的最优行使路线长,则有 计算程序如下: model: sets: cities/S,A1,A2,A3,B1,B2,C1,C2,T/:L; roads(cities,cities)/ S,A1 S,A2 S,A3 A1,B1 A1,B2 A2,B1 A2,B2 A3,B1 A3,B2 B1,C1 B1,C2 B2,C1 B2,C2 C1,T C2,T/:D; endsets data: D= 6 3 3 6 5 8 6 7 4 6 7 8 9 5 6; L=0,,,,,,,,; !只有L(S)=0,其余为空; enddata @for(cities(i)|i #gt# @index(S): !对S指标进行索引; L(i)=@min(roads(j,i):L(j)+D(j,i));); end s aas bs t ds cs 4 7 3 2 2 3 3 2 图1 有向图 图2 3 cs s 图3 3 4 cs aas s ds 3 图4 3 4 cs aas s 7 bs ds 3 图5 3 4 cs aas s 2 t 7 bs ds 3 图6 3 4 cs aas s 3 4 6 8 5 9 8 7 6

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档