6 Eylül 2017 Çarşamba

graph write_graphviz metodu

Giriş
Şu satırı dahil ederiz.
#include <boost/graph/graphviz.hpp>
write_grapviz_dp metodu ile kardeştir.

write_graphviz metodu - stream + graph
Örnek
Elimizde bir graph olsun.
typedef boost::adjacency_list<
    boost::vecS,                        //OutEdgeList
    boost::vecS,                        //VertexList
    boost::undirectedS                  //Directed
> Graph;
Şöyle yaparız.
write_graphviz (cout, g);
Dosyaya yazmak için şöyle yaparız.
std::ofstream f("d:\\g.dot"); 
boost::write_graphviz(f, g);
dot dosyasını svg dosyasına çevirmek için şöyle yaparız.
std::system(
  std::string("dot -Tsvg -Grankdir=LR -Nfontsize=24 d:\\g.dot > d:\\g.svg")
    .c_str()
);
Örnek
Şöyle yaparız
typedef boost::adjacency_list<boost::setS, boost::vecS, boost::undirectedS>
 GraphType;

std::ofstream subgraph_iso_output("large1.dot");

GraphType graph;
...
boost::write_graphviz(file, graph);
write_graphviz metodu - stream + graph + label_writer
Örnek
Elimizde şöyle bir graph olsun.
/// vertex properties
struct VertexData {
    std::string label;
    int num;
};

/// edges properties
struct EdgeData {
    std::string edge_name;
    double edge_confidence;
};

/// define the boost-graph
typedef boost::adjacency_list<boost::vecS, boost::vecS,
  boost::bidirectionalS,
  VertexData,
  boost::property<boost::edge_weight_t, double, EdgeData> > Graph;
Bu  graph'ı dolduralım. Edge'leri bağlamıyoruz ancak bir önemi yok örnek için.
boost::add_vertex(VertexData{..., ...}, g);
Bu graph'ı yazdıralım.
boost::write_graphviz(cout, g,
  boost::make_label_writer(boost::get(&VertexData::label, g)));
Çıktı olarak şunu alırız.
digraph G {
2[label=buster];
5[label=Enoch];
10[label=lire];
14[label=Rodger];
18[label=tiling];
}

Hiç yorum yok:

Yorum Gönder