Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) boost::write_graphviz

 

boost::write_graphviz is a Boost.Graph algorithm to store a graph to file, so it can be visualized.

 

 

 

 

 

Example

 

Modified from [1].

 

 

#include <string>
#include <vector>
#include <boost/graph/graphviz.hpp>

enum files_e { dax_h, yow_h, boz_h, zow_h, foo_cpp,
               foo_o, bar_cpp, bar_o, libfoobar_a,
               zig_cpp, zig_o, zag_cpp, zag_o,
                 libzigzag_a, killerapp, N };

const std::vector<std::string> GetNames()
{
  std::vector<std::string> v;
  v.push_back("dax.h");
  v.push_back("yow.h");
  v.push_back("boz.h");
  v.push_back("zow.h");
  v.push_back("foo.cpp");
  v.push_back("foo.o");
  v.push_back("bar.cpp");
  v.push_back("bar.o");
  v.push_back("libfoobar.a");
  v.push_back("zig.cpp");
  v.push_back("zig.o");
  v.push_back("zag.cpp");
  v.push_back("zag.o");
  v.push_back("libzigzag.a");
  v.push_back("killerapp");
  return v;
}

const std::vector<std::pair<int,int> > GetEdges()
{
  std::vector<std::pair<int,int> > v;
  v.push_back(std::make_pair(dax_h, foo_cpp));
  v.push_back(std::make_pair(dax_h, bar_cpp));
  v.push_back(std::make_pair(dax_h, yow_h));
  v.push_back(std::make_pair(yow_h, bar_cpp));
  v.push_back(std::make_pair(yow_h, zag_cpp));
  v.push_back(std::make_pair(boz_h, bar_cpp));
  v.push_back(std::make_pair(boz_h, zig_cpp));
  v.push_back(std::make_pair(boz_h, zag_cpp));
  v.push_back(std::make_pair(zow_h, foo_cpp));
  v.push_back(std::make_pair(foo_cpp, foo_o));
  v.push_back(std::make_pair(foo_o, libfoobar_a));
  v.push_back(std::make_pair(bar_cpp, bar_o));
  v.push_back(std::make_pair(bar_o, libfoobar_a));
  v.push_back(std::make_pair(libfoobar_a, libzigzag_a));
  v.push_back(std::make_pair(zig_cpp, zig_o));
  v.push_back(std::make_pair(zig_o, libzigzag_a));
  v.push_back(std::make_pair(zag_cpp, zag_o));
  v.push_back(std::make_pair(zag_o, libzigzag_a));
  v.push_back(std::make_pair(libzigzag_a, killerapp));
  return v;
}

int main()
{
  const std::vector<std::string> names = GetNames();
  const std::vector<std::pair<int,int> > used_by = GetEdges();

  const int n_edges = used_by.size();
  std::vector<int> weights(n_edges,1);

  typedef boost::adjacency_list<
    boost::vecS,
    boost::vecS,
    boost::directedS,
    boost::property< boost::vertex_color_t, boost::default_color_type >,
    boost::property< boost::edge_weight_t, int >
    > Graph;

  Graph g(used_by.begin(), used_by.end(), weights.begin(), N); //WORKS

  //Write graph to file
  {
    std::ofstream f("test.dot");
    boost::write_graphviz(f, g, boost::make_label_writer(&names[0]));
    f.close();
  }

  std::system("kgraphviewer test.dot");
}

 

 

 

 

 

External links

 

 

 

 

 

 

References

 

  1. Boost page of boost::write_graphviz

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict