繁体   English   中英

如何使用Boost显示网格图?

[英]how to display grid graph using boost?

我想这样打印网格图。

在此处输入图片说明

我尝试了以下代码

#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);

}

并得到这样的输出。

在此处输入图片说明

我认为您很乐意在那用neato代替dot

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

在此处输入图片说明

我从上面的sehe的答案中学到了如何绘制矩形形状。 但是neato总是给我一个倾斜的图。 要强制图形在水平方向上对齐其行,我们可以设置grah节点的pos 属性 我使用自定义属性编写器来做到这一点。 这是我的实现。

#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文档显示的图形相似。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM