![](/img/trans.png)
[英]How to find the shortest path of length k from a vertex in a weighted graph?
[英]Given a weighted graph and natural number k how to find the cheapest path from node s to t that can be divided by k?
給定一個不包括負循環的加權圖 G=(V,E)、一個自然數 k 和兩個頂點:s,t。
我怎樣才能找到從 s 到 t 的最便宜的路線,它的長度可以被 k 整除?
准備一個具有頂點 V × {0, 1, ..., n−1} 的新圖 G',並且對於 G 中長度為 ℓ 的每個弧 v → w,弧 (v, x) → (w, (x + ℓ) mod k)。 然后使用 Dijkstra 算法找到從 (s, 0) 到 (t, 0) 的最短路徑。
將 BFS 與優先級隊列一起使用,以便始終檢查最短的狀態(= 來自s
路徑)。 與普通的 Dijkstra 不同,您的狀態是完整的路徑,您可以在遇到已經訪問過的頂點時重新訪問它們。
我無法證明這樣的算法是最優的,但至少它應該是正確的,如果存在的話,總是返回一個有效的最短路徑答案。 某些圖和 K 值的運行時間會非常長,如果沒有從s
到t
的 k 整除路徑但存在路徑長度可被 k 整除的循環,則算法可能根本無法完成。 您可以先使用初步 DFS 找到並過濾掉它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.