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發出邊的相同


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM