2017-10-08 75 views
0

所以我發現一個問題,旅行者可以在圖形中行進一定距離,所有雙向邊具有一定的長度(距離)。假設在旅行某個邊緣(任一方向)時,您可以獲得一些金錢/禮物(這是針對所有邊緣的問題),因此您必須找到您可以在可以旅行的給定距離上收集的最高金額。基本問題是如何找到給定距離的所有可能路徑(圖中可能有循環),並在找到所有可能的路徑後,收集最大費用的路徑就是答案。注意:你想出的任何可能的路徑都不應該有一個循環(直線路徑)。圖論,所有具有給定距離的路徑

+0

開始和結束節點被給​​出或需要優化?沒有給出 – SeF

+0

..針對給定路徑長度的所有源和目的地進行優化。 –

回答

0

給出一個無邊連接圖,邊上有雙重權重(距離和獎勵)。 給定一個與可能距離相對應的固定數字d。

對於每對節點的(U,V)中,u不等於V,你正在尋找

  • 所有u和v,沒有重複的節點,其總的距離爲d的連接路徑{P_j} 。
  • 其獎勵最大的{P_j}子集{P_hat(j)}。

爲了得到第一個,我會嘗試使用Floyd-Warshall算法的修改版本,在這裏你不尋找最短的,但是對於任何路徑。 Floyd-Warshall使用基於考慮u和v之間的「中間節點」w的策略,遞歸地找到最小化u和v之間距離的路徑。

您可以做同樣的事情,同時採取所有路徑,而不是排除最小化,注意將已經在距離矩陣中訪問過的節點放入inf中,並且在運行時排除遞歸中的距離大於d或到達結尾的每個部分路徑(它們連接u和v)距離比d短。

如果給出了可能的距離[d,D]的間隔,而不是單個值d,那麼可以推廣,因爲在第二種情況下,您可能會一直得到空集。

對於第二步,您只需比較解決第一步中找到的每條路徑的獎勵,然後選擇最好的一條。

更多的是一個建議的方向,而不是一個完整的答案,但我希望它有幫助!

相關問題