簡體   English   中英

給定一個加權圖和自然數 k,如何找到可以除以 k 的從節點 s 到 t 的最便宜的路徑?

[英]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 值的運行時間會非常長,如果沒有從st的 k 整除路徑但存在路徑長度可被 k 整除循環,則算法可能根本無法完成。 您可以先使用初步 DFS 找到並過濾掉它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM