忍者ブログ
  • 2019.07
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 2019.09
C++のboostでgraphviz+dotを使ってみた
グラフを作りたかったので、graphvixを使ってみました。

【参考】Boost.Graph Graphviz形式で重みを出力

#include <fstream>
#include <vector>
#include <string>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
struct EdgeWithInfo
{
    int nodeS;
    int nodeE;
    int weight;
    std::string name;
};

typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS,
                              boost::no_property, boost::property<boost::edge_all_t, EdgeWithInfo>>
    Graph;
typedef std::pair<int, int> Edge;

enum
{
    A,
    B,
    C,
    D,
    E,
    N
};

const std::string name[] = {"A", "B", "C", "D", "E"};

int main()
{
    const std::vector<EdgeWithInfo> edgeWithInfo =
        {
            {A, B, 3, "→B"},
            {A, C, 1, "→C"},
            {A, D, 4, "→D"},
            {B, E, 2, "→E"},
            {C, E, 5, "→E"},
            {D, E, 6, "→E"}};

    std::vector<Edge> edges;

    std::transform(edgeWithInfo.begin(), edgeWithInfo.end(), std::back_inserter(edges),
                   [](auto ei) {
                       return std::make_pair(ei.nodeS, ei.nodeE);
                   });

    const Graph g(edges.begin(), edges.end(), edgeWithInfo.begin(), N);

    std::ofstream file("test.dot");
    boost::write_graphviz(file,
                          g,
                          boost::make_label_writer(name),
                          [](auto &graph_) {
                              return [&graph_](std::ostream &out, auto edge) {
                                  const EdgeWithInfo &ewi =
                                      *reinterpret_cast<const EdgeWithInfo *>(&boost::get(boost::edge_all, graph_, edge));
                                  out << "[";
                                  out << "weight=" << ewi.weight << ",";
                                  out << "label=" << ewi.name;
                                  out << "]";
                              };
                          }(g));
}

digraph G {
0[label=A];
1[label=B];
2[label=C];
3[label=D];
4[label=E];
0->1 [weight=3,label=→B];
0->2 [weight=1,label=→C];
0->3 [weight=4,label=→D];
1->4 [weight=2,label=→E];
2->4 [weight=5,label=→E];
3->4 [weight=6,label=→E];
}
正攻法ではない気がするけど、まあ良しとしよう。
PR
【2019/05/04 09:22 】 | C/C++ | 有り難いご意見(30)
                                    
<<javascriptのflatMapとpythonの内包表記 | ホーム | 超万能なsorted>>
有り難いご意見
無題
Es sind maximal 48 von 50 Trophäen erspielbar.
【2019/06/21 00:00】| URL | Willy #16fd584fa [ 編集 ]


無題
Es sind maximal 10 von 12 Trophäen erspielbar.
【2019/06/21 01:22】| URL | Theo #16fd5786a [ 編集 ]


無題
Es sind maximal 29 von 31 Trophäen erspielbar.
【2019/06/21 05:15】| URL | Brittany #426a8915da [ 編集 ]


無題
Es sind maximal 0 von 57 Trophäen erspielbar.
【2019/06/21 16:49】| URL | www.youtv365.com #203e3daddc [ 編集 ]


無題
Es sind maximal 0 von 57 Trophäen erspielbar.
【2019/06/21 23:13】| URL | Florentina #3897def9e9 [ 編集 ]


無題
Es sind maximal 41 von 51 Trophäen erspielbar.
【2019/06/28 22:28】| URL | Tresa #3fb1baa2f8 [ 編集 ]


無題
SelbstbewuЯte grundsдtzlich auf Sport angewandt) ist.
【2019/06/29 01:38】| URL | Leif #19e0076223 [ 編集 ]


無題
Wir haben die Anzahl der Startplätze auf 32 erhöht.
【2019/06/29 04:12】| URL | Yasmin #4c4ceda320 [ 編集 ]


無題
This is the perfect web site for anybody who would like to
find out about this topic. You realize so much its almost tough
to argue with you (not that I really would want to…HaHa).
You definitely put a fresh spin on a subject that's been written about
for a long time. Wonderful stuff, just great!
【2019/07/01 00:54】| URL | visit #836e8dde52 [ 編集 ]


無題
Es sind maximal 31 von 41 Trophäen erspielbar.
【2019/07/02 08:54】| URL | http://village.lorem.kr/?document_srl=1083121 #4c4ceda341 [ 編集 ]


無題
Gilt nicht für den Kauf von Geschenkgutscheinen.
【2019/07/02 16:00】| URL | pasangiklanmember.com #86d4d404e8 [ 編集 ]


無題
Röslein, Röslein, Röslein rot, Röslein auf der Heiden.
【2019/07/09 13:04】| URL | Elvira #35d787b3b9 [ 編集 ]


無題
SelbstbewuЯte grundsдtzlich auf Sport angewandt) ist.
【2019/07/10 03:54】| URL | Ervin #3fb1baae8f [ 編集 ]


無題
Es sind maximal 24 von 27 Trophäen erspielbar.
【2019/07/10 16:50】| URL | Fran #879dd208d4 [ 編集 ]


無題
Es sind maximal 0 von 57 Trophäen erspielbar.
【2019/07/11 08:14】| URL | Annie #19d9bba253 [ 編集 ]


無題
Es sind maximal 42 von 44 Trophäen erspielbar.
【2019/07/13 17:13】| URL | Florencia #19e00761ff [ 編集 ]


無題
Es sind maximal 0 von 46 Trophäen erspielbar.
【2019/07/18 03:12】| URL | Patrick #8145462689 [ 編集 ]


無題
Es sind maximal 31 von 41 Trophäen erspielbar.
【2019/07/18 07:47】| URL | Niki #8165767d4b [ 編集 ]


無題
Mit einem deutschen Klappspaten Grдben aushob.
【2019/07/18 14:37】| URL | Donte #426a890a7c [ 編集 ]


無題
Gilt nicht für den Kauf von Geschenkgutscheinen.
【2019/07/19 03:33】| URL | Velda #426a899545 [ 編集 ]


無題
Es sind maximal 0 von 31 Trophäen erspielbar.
【2019/07/19 07:21】| URL | Antoinette #879dd2123a [ 編集 ]


無題
Das gilt für gleichen Jahrgang und gleiche Charge.
【2019/07/19 13:11】| URL | Regan #1f7aa53f11 [ 編集 ]


無題
Das gilt für gleichen Jahrgang und gleiche Charge.
【2019/07/19 16:35】| URL | Regan #37f823318 [ 編集 ]


無題
Es sind maximal 41 von 45 Trophäen erspielbar.
【2019/07/21 04:27】| URL | Fanny #39fe70221 [ 編集 ]


無題
Auf St Michael's Mount gab es zunächst ein Kloster.
【2019/07/21 04:43】| URL | Christina #8140d17f07 [ 編集 ]


無題
Können Wünsche nicht mehr berücksichtigt werden.
【2019/07/23 11:12】| URL | Eve #4c4ceda1fa [ 編集 ]


無題
Es sind maximal 28 von 31 Trophäen erspielbar.
【2019/07/26 05:39】| URL | Jade #3b8464aef2 [ 編集 ]


無題
Es sind maximal 29 von 37 Trophäen erspielbar.
【2019/07/28 12:35】| URL | Darell #813b1da507 [ 編集 ]


無題
Aw, this was a really vendor advocacy good post. Taking a few
minutes and actual effort to create a great article… but what can I say… I
put things off a lot and never seem to get nearly anything done.
【2019/07/31 13:48】| URL | website #836e8dde7f [ 編集 ]


無題
Es sind maximal 23 von 25 Trophäen erspielbar.
【2019/08/01 00:46】| URL | Reda #3b84954b49 [ 編集 ]


貴重なご意見の投稿














<<前ページ | ホーム | 次ページ>>