簡體   English   中英

檢查從一個頂點v到另一個頂點w的所有路徑是否長度相同

[英]Check if all paths from a vertex v to another vertex w are of the same length

我有一個具有n個頂點和m邊的連通圖g

可以從兩個方向遍歷每個邊,而在一個方向上遍歷它們的權重為正,在另一個方向上遍歷它們的權重為負。

因此,對於每個權重為wu > v ,都存在一個權重為-w的邊v > u

我的目標:

對於給定的頂點v ,檢查是否存在返回v的路徑(一個循環),以使該路徑的邊權重之和不等於0 如果存在這樣的路徑,則輸出該路徑的最小邊緣數,否則輸出"all cycles are fine"

例子:

vv所有路徑總和為0的示例。 輸出為"all cycles are fine"

例子1

有一個示例,其中存在從vv的路徑,其邊的總和不等於0 在此示例中,此路徑的最小邊數為4:

例子2

我目前的做法:

問題似乎等同於檢查從給定頂點v到任何其他頂點w所有路徑的長度是否相等,如果為true,則“所有周期都很好”,否則我將輸出最短周期的長度,該長度會破壞條件。 我很難找到一種有效的算法來測試這種情況。

一種檢查是否存在通過頂點A的“錯誤循環”的簡單算法是從A運行BFS,然后查看以不同的成本訪問了至少至少兩次的頂點B。 如果不存在B,則所有循環都是好的,否則循環不好,其大小(直到第一次訪問B的邊緣)+(直到訪問B的邊緣具有不同的成本)。 該BFS最多訪問每個頂點兩次,因此復雜度仍然是線性的。

因此,可以使用圖表中每個頂點的BFS解決此問題。 當然,也許可以提高效率。 適當的大小取決於n和m的大小。

暫無
暫無

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

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