У меня есть график, и я хочу изменить его тип на подграф, чтобы иметь возможность разделить его на несколько подграфов, чтобы получить более точную печать с помощью 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
...
В чем проблема? И как я могу это исправить?
Проблемы не с чертами как таковыми.
Подграф требует свойство 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
Других решений пока нет …