2012-02-15 69 views
2

connected graph我已經設置節點和邊的和我用Dijkstra算法找到最短閉合cycles.My週期彼此連接(黑色小循環圖中的)的週期。這意味着,2個週期,有一個共同的優勢。現在,我想獲得最外層的週期(圖中的紅圈),其中包含所有最短的週期。我認爲這是一種聯合。不確定。是否有任何特定的方法或算法從圖中可用的最短閉環獲取最外週期?這將如何實現?聯盟的曲線圖

這裏,我標記問題下C++也,因爲大多數程序員知道如何連接週期的工會,我也想用C來實現這個++。先謝謝你。

我已經編輯和上傳身影我原來的職位,因爲這是不明確的爲別人着想。

+0

這個詞。 – 2012-02-15 16:38:58

+0

循環的聯合究竟是什麼?它是一組節點,還是需要一個巨大的循環遍歷所有這些節點,還是幾次使用每個節點的巨大循環? – 2012-02-15 16:39:51

+1

至少對我來說,並不清楚你的意思是「所有周期的聯合」。您可能意思是在無向圖中查找所有雙連通組件或在有向圖中查找強連通組件。這有和至少後者的算法是由[升壓]實現(http://www.boost.org/doc/libs/1_48_0/libs/graph/doc/index.html)。 – 2012-02-15 16:42:55

回答

2

當我明白你的問題,你想找到一個連接planar graph的邊緣,最大的臉。枚舉Boost庫中的平面圖的面的算法有:Planar Face Traversal。您可以使用它遍歷圖的臉並找到涉及最多邊的那個。

注:

  • 這真的只爲平面圖
  • 對於許多圖形工作,解決的辦法是不是唯一,考慮正多面體的圖形 - 在這裏,所有面有相同的程度,所以它沒有很好的定義你們正在尋找的'外週期'其中之一

regular polyhedron graph example (Attribution: Tomruen at en.wikipedia)

  • 對於雙連接而哪些不是,圖表是不同的。如果它不是雙連接的,則會有「分支」伸入某些面,根據定義,這樣的分支的兩側都有同樣的面。根據您的喜好/需要,您可以將這些邊緣計入臉部長度或省略它們,獲得不同的結果。
+0

謝謝...我在看 – gnp 2012-03-08 13:25:36

1

升壓geometry似乎包含what你所需要的,但它是相當抽象的,我需要一些時間來與你的問題。顯然,within可應用於每一對戒指,以確定周長。 或更好,找到最大面積的戒指。 「我」的英文大寫