簡體   English   中英

在包含2個指定頂點的無向圖中尋找最短周期

[英]Finding shortest cycle in undirected graph that includes 2 specified vertices

我得到了一個類似於無向圖的哲學家數據集。 哲學家存儲在哈希圖中,其中的鍵是哲學家的名稱,值是他的鄰居的列表。

用戶輸入2個哲學家名稱作為輸入,我需要找到最短的周期(如果存在的話),其中包括這2個哲學家。

起初我以為這個問題與旅行商問題非常相似,但是在這個問題中我們也有旅行距離,每個頂點只能被訪問一次,在這里似乎不是這種情況。 這個問題的解決方案似乎與圖形有關,但是我不確定使用哪種算法,甚至哪個問題都與之相似。

我考慮過的解決方案涉及找到給定圖中的所有周期,將結果減少到僅包含用戶給出的哲學家的周期,並僅從那些周期中選出最短的周期,因為我會根據多少“跳躍”來對周期進行評分他們做出的決定本質上將是一個簡單的計數器。 這樣做的問題是,考慮到數據集有多大以及可能形成(很多)循環數,我擔心這可能不是最佳解決方案。

輸出必須采用以下格式:{u1,u2,u3,u4,u5,u1}其中u是創建我要尋找的循環的每個哲學家的名字。 如果不存在這樣的周期,那么我只需要打印一條適當的消息。

您可以使用Suurballe算法的變體。 如Wikipedia所述(在https://en.wikipedia.org/wiki/Suurballe's_algorithm上 ):

Suurballe算法是一種算法,用於在非負加權有向圖中找到兩條不相交的路徑,以使兩條路徑連接同一對頂點並具有最小的總長度。 […] Suurballe算法的主要思想是使用Dijkstra算法找到一條路徑,修改圖形邊緣的權重,然后第二次運行Dijkstra算法。 該算法的輸出是通過組合這兩個路徑,丟棄路徑沿相反方向遍歷的邊並使用其余邊形成兩條路徑作為輸出返回而形成的。

然后:

如上所述的Suurballe算法的版本可以找到邊緣不相交但可以共享頂點的路徑。 可以使用相同的算法來查找頂點不相交的路徑,方法是用一對相鄰的頂點替換每個頂點,其中一個頂點具有原始頂點的所有傳入鄰接u-in ,而另一個頂點具有所有出局鄰接u出 此修改圖形中的兩個邊不相交路徑必定與原始圖中的兩個頂點不相交路徑相對應,反之亦然,因此將Suurballe算法應用於修改后的圖會導致在原始圖中構造兩個頂點不相交的路徑。

因此,您需要翻譯|的無權,無向圖。 V | 頂點和| E | 加權有向圖2 |的未加權,無向邊。 V | 頂點和2 | E | + | V | 加權的定向邊緣; 然后應用Suurballe算法; 然后將結果轉換回原始圖上的循環。

暫無
暫無

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

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