График черт подграфа

У меня есть график, и я хочу изменить его тип на подграф, чтобы иметь возможность разделить его на несколько подграфов, чтобы получить более точную печать с помощью 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 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 ответ

Решение

Проблемы не с чертами как таковыми.

Подграф требует свойство 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, поэтому мы добавляем свойство индекса ребра в список смежности. Нам не нужно добавлять свойство индекса вершины, потому что оно встроено в 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
Другие вопросы по тегам