簡體   English   中英

有向圖中的 K 條邊不相交路徑

[英]K edge disjoint paths in a directed graph

給出 G = (V,E) 中的兩個頂點 u 和 v 和一個正整數 k,描述一個算法來判斷是否存在從 u 到 v 的 ak 條邊不相交路徑。 如果決策問題的答案是肯定的,請描述如何計算一組 k 個邊不相交的路徑。

解決方案:運行從 u 到 v 的最大流(給圖 G 中的所有邊的權重為 1,這樣一條邊只能是從 u 到 v 的一條路徑的一部分)並獲得流的值。 如果流的值為 k,那么我們對決策問題的答案是肯定的。

現在為了找到所有這樣的路徑,通過從 u 執行 BFS 來找到最小切割,因此我將有頂點的分區,它將頂點分成 2 個集合,在最小切割的每一側。

然后我是否需要再次執行從 u 到 v 的 DFS,以查找所有只有這些頂點的路徑,這些頂點位於我從最小切割中獲得的兩個分區集中。

或者有沒有其他更清潔的方法? 得到所有 k 條邊不相交的路徑。

一旦有了流程,您就可以按照流程提取邊緣不相交的路徑。

起始節點將有 k 個流,沿着 k 個邊離開 u。

對於這些邊中的每一個,您可以繼續沿流出流的方向移動以提取路徑,直到到達 v。您需要做的就是標記您已經使用過的邊以避免重復邊。

對離開 u 的 k 個流單元中的每一個重復以提取所有 k 個路徑。

偽代碼

repeat k times:
  set x to start node
  set path to []
  while x is not equal to end node:
      find a edge from x which has flow>0, let y be the vertex at the far end
      decrease flow from x->y by 1 unit
      append y to path
      set x equal to y
  print path

暫無
暫無

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

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