Я новичок в библиотеке графов Boost и пытаюсь нарисовать график с помощью graphviz.
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/utility.hpp> // for boost::tie
#include <iostream>
#include <utility> // for std::pair
using namespace boost;
using namespace std;
class V {};
class C {};
void draw_test(){
typedef boost::adjacency_list<boost::listS, boost::listS, boost::bidirectionalS, V, C > MyGraph;
typedef boost::graph_traits<MyGraph>::vertex_descriptor vertex_descriptor;
MyGraph g;
vertex_descriptor a = add_vertex(V(), g);
vertex_descriptor b = add_vertex(V(), g);
add_edge(a, b, g);
write_graphviz(std::cout, g);
}
int main() {
draw_test();
return 0;
}
Но я получил следующую ошибку:
Я буду очень благодарен за любую помощь
Вы можете найти точно такую же проблему в этих вопросах (1, 2). Проблема в том, что write_graphviz требует карту свойств индекса вершины (как и многие другие функции Boost.Graph). Список смежностей с listS в качестве его VertexList не имеет его по умолчанию. Если вам действительно не нужно listS
просто используйте vecS
в вашем втором параметре шаблона. Другая альтернатива, которую вы можете найти в первом связанном ответе, — это создать и инициализировать карту свойств внешнего индекса вершины, а затем использовать перегрузку: write_graphviz
это позволяет вам передавать это явно. Это действительно полезно для множества алгоритмов, когда вам нужно использовать listS
или же setS
в вашем графике.
Других решений пока нет …