• Yen算法求K条最短路径


    众所周知,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发出边的相同

    作者:天际使徒
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    微软发布了Java Lang Conversion Asst 3.0测试版
    关于GC的使用
    增加了简单的搜索功能
    [推荐]TreeView专题讨论
    我是这样过大年初一的!
    [推荐]动态加载类(在程序中调用DLL文件)
    请大家正确填写自己的邮件地址
    Microsoft Win32 to Microsoft .NET Framework API Map
    奇怪的问题
    发表含有HTML代码的文章时,请保持HTML代码的完整
  • 原文地址:https://www.cnblogs.com/Horizon-asd/p/12602273.html
Copyright © 2020-2023  润新知