Повысить, как записать вес ребра в графвизе? - PullRequest
1 голос
/ 06 февраля 2020

С бустом я пытаюсь написать в графическом формате очень большой и плотный граф, который является adjacency_matrix. Сам график: boost::adjacency_matrix<boost::undirectedS, boost::no_property, boost::property<boost::edge_weight_t, float>, boost::no_property>.

Я искал в StackOverflow, Google, и либо я не понял код, либо он был LABEL, а не WEIGHT.

Моя версия Boost 1.72.0.

Прошу прощения за мой Engli sh, если я допустил ошибку. Заранее спасибо.

1 Ответ

1 голос
/ 07 февраля 2020

Авторы ярлыков тоже PropertyWriter с . PropertyWriters используются для записи весов (или любого другого атрибута ребра / вершины).

Однако я настоятельно рекомендую использовать dynamic_properties для упрощения процесса. Вот 20 + примеров использования У меня есть на этом сайте.

Вот простейшее приложение на ajacency_matrix, о котором я могу подумать:

Live On Coliru

#include <boost/graph/adjacency_matrix.hpp>
#include <boost/graph/graphviz.hpp>
#include <iostream>

using EP = boost::property<boost::edge_weight_t, float>;
using G  = boost::adjacency_matrix<boost::undirectedS, boost::no_property, EP>;

int main() {
    G g(5);

    add_edge(1, 2, 3.5f, g);
    add_edge(2, 3, 4.5f, g);

    boost::dynamic_properties dp;
    dp.property("node_id", get(boost::vertex_index, g));
    dp.property("weight",  get(boost::edge_weight,  g));
    boost::write_graphviz_dp(std::cout, g, dp);
}

Печать:

graph G {
0;
1;
2;
3;
4;
2--1  [weight=3.5];
3--2  [weight=4.5];
}
...