回覆列表
  • 1 # 使用者7698895345900

    1.首先,引入一個輔助向量D,它的每個分量 D 表示當前所找到的從起始點 (即源點 )到其它每個頂點 的長度。

    例如,D[3] = 2表示從起始點到頂點3的路徑相對最小長度為2。這裡強調相對就是說在演算法執行過程中D的值是在不斷逼近最終結果但在過程中不一定就等於長度。

    2.D的初始狀態為:若從 到 有弧(即從 到 存在連線邊),則D 為弧上的權值(即為從 到 的邊的權值);否則置D 為∞。

    顯然,長度為 D = Min{ D | ∈V } 的路徑就是從 出發到頂點 的長度最短的一條路徑,此路徑為( )。

    3.那麼,下一條長度次短的是哪一條呢?也就是找到從源點 到下一個頂點的最短路徑長度所對應的頂點,且這條最短路徑長度僅次於從源點 到頂點 的最短路徑長度。

    假設該次短路徑的終點是 ,則可想而知,這條路徑要麼是( ),或者是( )。它的長度或者是從 到 的弧上的權值,或者是D 加上從 到 的弧上的權值。

    4.一般情況下,假設S為已求得的從源點 出發的最短路徑長度的頂點的集合,則可證明:下一條次最短路徑(設其終點為 )要麼是弧( ),或者是從源點 出發的中間只經過S中的頂點而最後到達頂點 的路徑。

    因此,下一條長度次短的的最短路徑長度必是D = Min{ D | ∈V-S },其中D 要麼是弧( )上的權值,或者是D ( ∈S)和弧( , )上的權值之和。

    演算法描述如下:

    1)令arcs表示弧上的權值。若弧不存在,則置arcs為∞(在本程式中為MAXCOST)。S為已找到的從 出發的的終點的集合,初始狀態為空集。那麼,從 出發到圖上其餘各頂點 可能達到的長度的初值為D=arcs[Locate Vex(G, )], ∈V;

    2)選擇 ,使得D =Min{ D | ∈V-S } ;

    3)修改從 出發的到集合V-S中任一頂點 的最短路徑長度。

  • 中秋節和大豐收的關聯?
  • 三十歲以前什麼標準才算成功?