我正在閱讀BOOST庫,發現他們有一個算法來查找圖中的橋,他們確實有一個找到關節點。無論如何,這可以有效地完成?在圖C++(BOOST)中查找橋樑?
我有一個想法:
使用升壓找到鉸接點
2.使用out_edges,找到所有邊緣連接的每個關節點
3.刪除它們並計算連接組件上的數量(我假設我的圖形最初是完全連接的),如果它超過1,我添加這邊緣的橋樑。
問題:橋樑是否需要連接到關節點?我只是假設他們是,找不到任何網絡。
我也想知道如何解決這個問題。
我的另一種方法會更天真,並採取O(V *(V + E)),這是非常糟糕的。
林一點不清楚,所以你說我只需要檢查邊緣的整個末端都是關節點? – LoveMeow 2014-11-24 13:49:50
@LoveMeow:嘗試使用具有兩個節點和一個邊的平凡圖。如果Boost將兩個節點都算作關節節點,那麼是的。如果Boost不把它們算作關節節點,那麼你需要對圖進行預處理(但效率更高)。迭代地,枚舉所有單連接的節點,將它們的單邊標記爲橋,刪除該邊並再次檢查。 (這反覆修剪線性鏈,其中所有的邊緣都是橋樑) – MSalters 2014-11-24 14:00:52
我檢查了,boost並沒有在關節點上對它們進行計數!所以我需要枚舉所有連接到一個邊的節點,並將它們標記爲橋,除了兩個關節點之間的那些節點? – LoveMeow 2014-11-24 14:13:39