Я изо всех сил пытаюсь реализовать простой boost :: graph. Я пытался читать всю документацию можно найти и примеры и т.д. ...пытается реализовать простой boost :: обход графа
Вот мой код (копируется из других примеров на StackOverflow)
Вершина:
class customvertex
{
public:
double some_member;
};
Посетитель :
class MyVisitor : public boost::default_dfs_visitor
{
public:
void discover_vertex(MyGraphVertex v, const MyGraph& g) const
{
std::cout << v << std::endl;
return;
}
};
ЬурейеЕ декларация:
typedef boost::adjacency_list<boost::vecS,boost::vecS,boost::undirectedS, customvertex> MyGraph;
typedef boost::graph_traits<MyGraph>::vertex_descriptor MyGraphVertex;
Код, который вызывает проблему:
MyGraph theGraph;
customvertex a;
MyGraphVertex vert_a = boost::add_vertex(a, theGraph);
customvertex b;
MyGraphVertex vert_b = boost::add_vertex(b, theGraph);
boost::add_edge(vert_a , vert_b, theGraph);
MyVisitor vis;
boost::depth_first_search(theGraph, boost::visitor(MyVisitor()));
Окончательный вызов depth_first_search вызывает компилятор выкидывать ошибку каскадирования 112 строки.
понятия кажутся IncidenceGraphConcept и MultiPassInputIterator
Ключевые части кажутся:
1> T:\boost\boost_1_47_0\boost/concept/detail/msvc.hpp(23) : while compiling class template member function 'void boost::concepts::check<Model>::failed(Model *)'
1> with
1> [
1> Model=boost::SignedInteger<int>
1> ]
1> T:\boost\boost_1_47_0\boost/graph/depth_first_search.hpp(83) : see reference to function template instantiation 'void boost::function_requires<boost::concepts::IncidenceGraphConcept<G>>(Model *)' being compiled
1> with
1> [
1> G=MyGraph,
1> Model=boost::concepts::IncidenceGraphConcept<MyGraph>
1> ]
1> T:\boost\boost_1_47_0\boost/graph/depth_first_search.hpp(202) : see reference to function template instantiation 'void boost::detail::depth_first_visit_impl<VertexListGraph,DFSVisitor,ColorMap,boost::detail::nontruth2>(const IncidenceGraph &,unsigned int,DFSVisitor &,ColorMap,TerminatorFunc)' being compiled
1> with
1> [
1> VertexListGraph=MyGraph,
1> DFSVisitor=const MyVisitor,
1> ColorMap=boost::shared_array_property_map<boost::default_color_type,boost::vec_adj_list_vertex_id_map<boost::property<boost::vertex_bundle_t,customvertex>,unsigned int>>,
1> IncidenceGraph=MyGraph,
1> TerminatorFunc=boost::detail::nontruth2
1> ]
Любые и все помогают оценивать. Я уверен, что я пропустил что-то простое, и я обычно могу понять это из примеров. Я думаю, что boost :: graph выглядит великолепно, идеально подходит для того, что мне нужно, но немного больше документации ...
Я достаточно опытен с программированием шаблонов, но я потратил слишком много часов на это сейчас, время попросить о помощи!
вы не хотите 'повышение :: посетителя (VIS)'? –
Согласно документации, ['depth_first_search'] (http://www.boost.org/libs/graph/doc/depth_first_search.html) работает только с ориентированными графами, но с использованием boost 1.54 на g ++ 4.8.1 пример с использованием фрагменты, которые вы опубликовали, работают. Существует еще один алгоритм, который должен работать, когда ваш график неориентирован: ['undirected_dfs'] (http://www.boost.org/libs/graph/doc/undirected_dfs.html). Поэтому, возможно, вам стоит попытаться выяснить, работает ли это в вашей версии Visual Studio. – llonesmiz
@Guy Sirton: да, да, это всего лишь фрагмент из меня, который очень часто возится с кодом –