Переименовать вершины графа BOOST

244
09 ноября 2021, 11:50

Как задавать имена вершинам в моем коде?

хочу поменять 0-3 на названия например А1, А2

#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
using namespace std;
using namespace boost;
typedef adjacency_list<
        vecS,
        vecS,
        undirectedS
> MyGraph;
int main()
{
    MyGraph g(5);
    add_edge(0, 1, g);
    add_edge(1, 3, g);
    add_edge(3, 1, g);
    ofstream f("graph.dot");
    write_graphviz(f, g);
    f.close();
    system("C:/Graphwiz/bin/dot.exe graph.dot -Kcirco -Tsvg -o graph.svg");
    system("start graph.svg");
    return 0;
}
Answer 1

Не уверен, что это возможно. Однако, Вы можете добавить ярлыки для необходимых вершин: См. update.

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
struct VtxProps { std::string name; };
struct EdgProps { std::string name; };
using Graph = boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, VtxProps, EdgProps>;
int main() {
    Graph g(3);
    g[0].name = "A0";
    g[1].name = "A1";
    g[2].name = "A2";
    add_edge(0, 1, g);
    add_edge(1, 3, g);
    add_edge(3, 1, g);
    write_graphviz(std::cout, g,
            make_label_writer(get(&VtxProps::name, g)),
            make_label_writer(get(&EdgProps::name, g)));
}

Пример на wandbox.

Upd.: детальнее посмотрел документацию, если я правильно понимаю, это то, что Вам нужно:

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
using VertexProperty = boost::property<boost::vertex_name_t, std::string>;
using Graph = boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, VertexProperty>;
typedef boost::graph_traits<Graph>::vertex_descriptor VertexDescriptor;
int main() {
    Graph g;    
    for (int i = 0; i < 4; i++) {
        boost::add_vertex(Graph::vertex_property_type("A" + std::to_string(i)), g);
    }
    boost::dynamic_properties dp;
    dp.property("node_id", boost::get(boost::vertex_name, g));
    add_edge(0, 1, g);
    add_edge(1, 3, g);
    add_edge(3, 1, g);
    write_graphviz_dp(std::cout, g, dp);
}

Пример на wandbox.

READ ALSO
О наследовании в С++

О наследовании в С++

Задание от преподавателя ООП в вузеВычислить сумму чисел наследуемых классов используя методы доступа

86
Перенаправление вывода консоли в файл

Перенаправление вывода консоли в файл

Как перенаправить вывод cmd в файл

340
Почему не корректно срабатывает ZBuffer

Почему не корректно срабатывает ZBuffer

Помогите, уже второй день не могу понять, почему у меня не корректно отображается 3d сцена, плоскости не перекрываются, почему, не понятно

157
Сортировка по алфавиту

Сортировка по алфавиту

Собственно говоря мне нужно отсортировать " string name;" по алфавитуЖелательно без указателей и векторов

67