有向圖最長路徑

有向圖(Directed Graph)中最長路徑的問題是指在圖中找到一條路徑,使得路徑上邊的權值總和最大。這裡的權值可以是任意數值,不一定非要是正數。

在有向圖中最長路徑問題中,可以分為兩種情況:

  1. 單源最長路徑問題(Single-Source longest path problem):給定一個起點,找到到所有其他節點的最長路徑。
  2. 多源最長路徑問題(All-Pairs longest path problem):找到所有節點對之間的最長路徑。

單源最長路徑問題可以用動態規劃(Dynamic Programming)來解決,時間複雜度為 O(n^2),其中 n 是圖中節點的數量。這個算法的基本思想是使用一個陣列來記錄從每個節點到起點的最長路徑,然後遞迴地更新這些值。

多源最長路徑問題可以用Floyd-Warshall算法來解決,時間複雜度為 O(n^3)。這個算法可以用來找到任意兩點之間的最短路徑,但是它可以很容易地修改為找到最長路徑。

需要注意的是,如果圖中有負權邊,那麼最長路徑問題可能沒有解,或者可能有多個解。例如,如果圖中有環,並且環上的邊權總和為負,那麼就可以無限次地經過這個環,使得路徑的權值總和無限大。因此,在實際應用中,通常會假設圖中沒有負權邊。