使用boost实现带矢量的图形

时间:2014-12-11 01:15:37

标签: c++ boost vector graph

我试图用三个不同的向量使用boost来实现图形:

std::vector<std::string> vertex_array;
std::vector<Edge> edge_array;
std::vector<int> weight_array;

Edge定义为:

typedef std::pair<std::string, std::string> Edge;

我的图表定义为:

typedef adjacency_list<vecS, vecS, undirectedS> Graph;

数组都填充了我从输入文件中获取的数据,因此顶点向量中的第一个元素将类似于&#34; A&#34;,边缘向量中的第一个元素将类似于(B,C)和权重向量中的第一个元素是边缘向量中第一个边的权重,或者在这种情况下是BC。

问题在于,我对C ++不是很流利,而且我也很擅长提升和绘制图形。我曾尝试查看boost网站上的示例代码,但它们都使用数组而不是向量。我确实试过这个示例代码:

Graph g(edge_array, edge_array + sizeof(edge_array) / sizeof(Edge), num_vertices);

我确实有一个num_vertices变量,但它仍然给我一个错误。

有没有人知道如何使用边缘,顶点和权重矢量创建图形,我最终可以使用Dijkstra的增强版本?

很抱歉,如果这个问题非常模糊或基本,我真的不知道如何使用提升和实现图表。

1 个答案:

答案 0 :(得分:1)

来自docs

  

Graph类型必须是Vertex List Graph和Incidence Graph的模型。

使用adjacency_list图表的 an example too

当您将listS替换为该示例中的vecS时,会返回完全相同的响应(尽管我还没有检查所有代码是否合理)


typedef adjacency_list<vecS, vecS, undirectedS> Graph;

从这一行开始,边缘似乎没有weight属性。对于Dijkstra来说,选择没有这些信息的最佳路径会让人感到困惑。通过快速浏览文档,我认为您可以提供外部weight地图。另请注意:

  

当所有边权重等于1时,使用广度优先搜索而不是Dijkstra算法。