如何使用boost显示网格图?

时间:2016-06-03 07:30:00

标签: c++ boost graph

我想像这样打印网格图。

enter image description here

我尝试了以下代码

#include <boost/graph/graphviz.hpp>
#include <boost/graph/grid_graph.hpp>
typedef boost::grid_graph<2> Grid;
int main()
{
    boost::array<std::size_t, 2> lengths = { { 3, 5 } };
    Grid grid(lengths);
    std::ofstream gout;
    gout.open("test.dot");
    boost::write_graphviz(gout, grid);

}

得到这样的输出。

enter image description here

2 个答案:

答案 0 :(得分:4)

我认为您很高兴用dot替换neato

http://www.graphviz.org/category/graphviz-terms/neato

enter image description here

答案 1 :(得分:0)

我学会了如何根据上面的答案绘制矩形。但是neato总是给我一个倾斜的图形。要强制图形在水平方向上对齐其行,我们可以设置grah节点的pos attribute。我使用自定义属性编写器来完成它。这是我的实施。

#include <iostream>

#include <boost/graph/grid_graph.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/array.hpp>

struct PosWriter
{
  template <typename Vertex>
  void operator()(std::ostream& out, const Vertex& v)
  {
    out << "[pos=\"" << v[0] << "," << v[1] << "\"]";
  }
};

int main()
{
  using Graph = boost::grid_graph<2>;
  boost::array<std::size_t, 2> lengths = {5, 3};
  Graph g(lengths);
  std::ofstream file("grid.dot");
  boost::write_graphviz(file, g, PosWriter());

  return 0;
}

现在绘制的图表看起来与BGL文档显示的相似。

enter image description here