[英]Check if all paths from a vertex v to another vertex w are of the same length
我有一個具有n
個頂點和m
邊的連通圖g
。
可以從兩個方向遍歷每個邊,而在一個方向上遍歷它們的權重為正,在另一個方向上遍歷它們的權重為負。
因此,對於每個權重為w
邊u
> v
,都存在一個權重為-w
的邊v
> u
。
我的目標:
對於給定的頂點v
,檢查是否存在返回v
的路徑(一個循環),以使該路徑的邊權重之和不等於0
。 如果存在這樣的路徑,則輸出該路徑的最小邊緣數,否則輸出"all cycles are fine"
。
例子:
從v
到v
所有路徑總和為0
的示例。 輸出為"all cycles are fine"
:
有一個示例,其中存在從v
到v
的路徑,其邊的總和不等於0
。 在此示例中,此路徑的最小邊數為4:
我目前的做法:
問題似乎等同於檢查從給定頂點v
到任何其他頂點w
所有路徑的長度是否相等,如果為true,則“所有周期都很好”,否則我將輸出最短周期的長度,該長度會破壞條件。 我很難找到一種有效的算法來測試這種情況。
一種檢查是否存在通過頂點A的“錯誤循環”的簡單算法是從A運行BFS,然后查看以不同的成本訪問了至少至少兩次的頂點B。 如果不存在B,則所有循環都是好的,否則循環不好,其大小(直到第一次訪問B的邊緣)+(直到訪問B的邊緣具有不同的成本)。 該BFS最多訪問每個頂點兩次,因此復雜度仍然是線性的。
因此,可以使用圖表中每個頂點的BFS解決此問題。 當然,也許可以提高效率。 適當的大小取決於n和m的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.