2010-09-15 45 views
4

我使用Boost圖庫處理無向圖,並宣佈我的圖有Boost圖庫無向圖無平行邊執法

typedef property<vertex_index_t, int, property<vertex_name_t, string> > VertexProperty; 
typedef adjacency_list<vecS, setS, undirectedS, VertexProperty > UndirectedGraph; 

正如你所看到的,OutEdgeList是一個類型爲std :: set和我選擇它,因爲文檔說這種類型會強制平行邊緣的缺失。

現在,我的程序讀取一個文本文件,指示節點之間的邊界,如果以前沒有看到節點,則創建節點並在它們之間添加邊。

我最近用大量的數據運行代碼,發現奇怪的結果。幾個小時後,我發現一些用戶比圖中頂點的數量更多,所以我用一個簡單的文本文件來測試代碼,該文件只描述了同一對節點之間的兩條邊,但是具有相反的源,目標,這樣升壓將執行以下操作:

add_edge(A,B) 
add_edge(B,A) 

並且注意到Boost最終添加了兩條邊。 out_degree爲他們兩個返回2。

現在,問題:我做錯了什麼?對於setS作爲OutEdgeList類型的無向圖,不應該將add_edge(a,b)與add_edge(b,a)相同嗎?

謝謝。 ;)

回答

5

問題是OutEdgeList是第一個模板參數,而不是第二個,所以我實際上使用vecS而不是setS。

+0

你真的解決了這個問題嗎?即使OutEdgeList被設置爲'setS',我仍然有這個問題,因爲即使在無向圖中,setS仍然把邊('A,B)'視爲不等於'(B,A)'。 – xuhdev 2015-01-29 07:55:19

+0

@xuhdev它適用於我:https://gist.github.com/daviddoria/3a95428c85057c2b404ef9193083a6c3 – 2016-11-09 02:53:31