我有一個非負的權重圖,在此圖中有任何「特殊」弧。 找到一個算法,可以找到兩個頂點之間的最小路徑,最多使用k個「特殊」弧。 輸入:圖形,s,t,k。找到最多使用最多k個弧線的最短路徑
我想過如果有一個超過k個弧的特殊廢品的路徑,使用植根於s到達t的樹。 在這一點上,我應該有一個DAG,並使用任何算法來找到最小距離。
我有一個非負的權重圖,在此圖中有任何「特殊」弧。 找到一個算法,可以找到兩個頂點之間的最小路徑,最多使用k個「特殊」弧。 輸入:圖形,s,t,k。找到最多使用最多k個弧線的最短路徑
我想過如果有一個超過k個弧的特殊廢品的路徑,使用植根於s到達t的樹。 在這一點上,我應該有一個DAG,並使用任何算法來找到最小距離。
我有兩種方法:
第一方法: 對於每個頂點u
,計算從源到s
該頂點k+1
最短路徑。因此,每個頂點將有一個數組dst = {d0, d2, d3, .... , dk}
其中di
是從s
到u
的最短路徑,使用的確切是i
特殊弧。 現在,您可以使用dikstra's algorithm的變體來解決此問題,其中不是擁有一個優先級隊列,而是您有k + 1
優先級隊列,其中每個優先級隊列對應的值爲i : 0 <= i <= k
。
第二種方法(更優雅): 想象一下,您的建築物有k + 1
層。每個樓層都有一張圖表的副本;然而,特殊的弧線在相鄰樓層之間起着樓梯的作用。因此,如果原始圖形中頂點u
頂點v
之間有特殊弧線,則在j (0 <= j <= k-1)
樓層的每個頂點u
與j + 1
樓層的每個頂點v
之間都會有一條弧線。因此,在這張新圖中,從地板0
中的頂點u
到地板j
中的頂點v
的任何路徑恰好使用j
特殊弧。然後在新圖中,不能從任何頂點u
到任何其他頂點v
,因爲只能爬到最多k層,所以使用多於k
特殊弧。您可以使用Dikstra的算法來解決在0
樓層以源頂點開始的新圖上的問題。
運行時間爲O(k * |E| + k * |V| * log(k*|V|))
。