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)相同嗎?
謝謝。 ;)
你真的解決了這個問題嗎?即使OutEdgeList被設置爲'setS',我仍然有這個問題,因爲即使在無向圖中,setS仍然把邊('A,B)'視爲不等於'(B,A)'。 – xuhdev 2015-01-29 07:55:19
@xuhdev它適用於我:https://gist.github.com/daviddoria/3a95428c85057c2b404ef9193083a6c3 – 2016-11-09 02:53:31