子图的图形特征

时间:2014-01-31 11:06:08

标签: c++ boost subgraph

我有一个图表,我想将其类型更改为子图,以便能够将其划分为更多子图,以获得更多纵坐标打印图形。 问题是,当我将子图的适当性添加到我的图中时,顶点描述符不再有效。

修改前的代码:

    #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;
    ...

将图表更改为子图后的代码:

    #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
   ...

有什么问题?我该如何解决?

1 个答案:

答案 0 :(得分: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