2014-01-31 4 views
2

У меня есть график, и я хочу изменить его тип на подграф, чтобы его можно было разделить на более подграфы, чтобы получить более ординатную печать с помощью графика. Проблема заключается в том, что при добавлении подграфа подграфа в мой граф дескриптор вершин больше не работает.Графические черты подграфа

код перед модификацией:

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

Что такое проблема? И как я могу это исправить?

ответ

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 внутренних свойств, поэтому мы добавим свойство индекса края к списку смежности. Нам не нужно добавлять свойства вершинного индекса, потому что он встроен в список 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 Я уверен, что вы можете комбинировать свойства края. В конце концов, это причина, по которой свойства _tagged_ ('edge_index_t' и' edge_weight_t' являются _tags_). Я бы прочитал документацию для вас, если бы у меня было время :) – sehe

+0

Да! Brilliant! Я забыл о настройке пользовательских ярлыков! Спасибо! – W4lker

Смежные вопросы