2014-01-31 41 views
2

我有一個圖形,我想將其類型更改爲子圖形,以便能夠將其劃分爲更多的子圖形以獲得更多與graphviz的縱座標打印。 問題是,當我將子圖正確添加到我的圖中時,頂點描述符不再起作用。修改前子圖的圖形特徵

代碼:

#include "Node.cpp" 
    #include <boost/graph/adjacency_list.hpp> 
    #include <boost/property_map/property_map.hpp> 
    #include <boost/graph/graph_traits.hpp> 
    #include <boost/graph/subgraph.hpp> 

    using namespace boost; 

    typedef subgraph<adjacency_list<vecS, vecS, directedS, Node, property < edge_weight_t, float > > >mygraph; 
    typedef graph_traits <mygraph>::vertex_descriptor vertex_descriptor; //ERROR 
    ... 

是什麼問題:

#include "Node.cpp" 
    #include <boost/graph/adjacency_list.hpp> 
    #include <boost/property_map/property_map.hpp> 
    #include <boost/graph/graph_traits.hpp> 
    #include <boost/graph/subgraph.hpp> 

    using namespace boost; 

    typedef adjacency_list<vecS, vecS, directedS, Node, property < edge_weight_t, float > > mygraph; 
    typedef graph_traits <mygraph>::vertex_descriptor vertex_descriptor; 
    ... 

代碼更改圖形以子後?我該如何解決它?

回答

3

問題不在於性狀本身。

子圖需要的edge_index屬性,因爲它存儲在本地映射:

typedef std::map<edge_index_type, edge_descriptor> LocalEdgeMap; 
    LocalEdgeMap m_local_edge; // global -> local 

因爲沒有edge_index_t財產,地圖的主要類型的計算結果爲void

這被記錄在這裏:http://www.boost.org/doc/libs/1_55_0b1/libs/graph/doc/subgraph.html

底層圖形類型需要具有的vertex_index和edge_index內部屬性,所以我們添加的邊緣索引屬性,以鄰接表。我們不需要添加頂點索引properety,因爲它內置在adjacency_list中。我們將構建圖1中的圖和子圖,所以我們總共需要六個頂點

考慮增加邊緣索引:

typedef subgraph<adjacency_list<vecS, vecS, directedS, Node, property < edge_index_t, index > > >mygraph; 
typedef graph_traits <mygraph>::vertex_descriptor vertex_descriptor; // COMPILES 
+0

它編譯但edge_weight屬性用於以後在我的代碼中,所以我不能用edge_index替換它,有沒有辦法解決? – W4lker

+0

@ W4lker我很確定你可以結合邊緣屬性。畢竟,這是屬性被標記爲_('edge_index_t'和'edge_weight_t'爲_tags_)的全部原因。如果我有時間,我會爲你閱讀文檔:) – sehe

+0

是的!輝煌!我忘了自定義標籤設置!謝謝! – W4lker