首页 > 编程语言 > 详细

Yen算法求K条最短路径

时间:2020-03-31 00:24:51      阅读:140      评论:0      收藏:0      [点我收藏+]

众所周知,Dijkstra算法可以求得一条最短路径,但如果想求多条短路径或者最短路径有多条时,无法求得,需要用到Yen算法。

 1 Yen算法原理

  • 首先利用Dijkstra算法求得从源节点到目的节点的第一条最短路径Q(1)。
  • 求接下来K-1条短路径时,采用递推法中的偏离路径算法思想。
  • 在求Q(i+1)时,将Q(1)上除了目的节点外的所有节点都视为偏离节点,并计算每个偏离节点到目的节点之间的最短路径,然后将其与Q(1)上的源节点到偏离节点的路径拼接到一起共同构成候选路径,从而求得最短偏离路径。

 2 Yen算法举例说明

      技术分享图片

     源点C,终点H

    1)通过最短路径算法Dijkstra得到C到H的最短路径

         Q(1)=C-E-F-H(5)

    2)  偏离点C,E,F

    3)  C->H,候选路径:C-D-F-H(8)

    4)  E->H,候选路径:C-E-G-H(7)

    5)  F->H,候选路径:C-E-F-G-H(8)

    6)  第二短路径:Q(2)= C-E-G-H(7)

3 补充知识点(Yen算法)

  Q:如何从候选列表中选出合适的路径

  如果路径权值和最小的路有多条:从其中选出节点数最少的路径。

  Q:求Vi到终点d的最短路径

  设起点为s,终点为t,偏离点为Vi。求偏离点到终点的最短路径时要注意两个问题

(1)防止从起点到终点的整体路径有环

         从Vi到t的最短路径不能包含s到Vi的路径上的任何节点

(2)避免与已经在结果列表中的路径重复

        从Vi发出的边不能与结果列表中的路径p1,p2,...pk,上从Vi发出边的相同

Yen算法求K条最短路径

原文:https://www.cnblogs.com/Horizon-asd/p/12602273.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!