使用提升实现带有向量的图形

Implementing a graph with vectors using boost

本文关键字:向量 图形 实现      更新时间:2023-10-16

我正在尝试使用带有三个独立向量的 boost 实现一个图形:

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

边缘定义为:

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

我的图形定义为:

typedef adjacency_list<vecS, vecS, undirectedS> Graph;

数组都填充了我从输入文件中获得的数据,因此顶点向量中的第一个元素类似于"A",边缘向量中的第一个元素类似于 (B, C(,权重向量中的第一个元素将是边缘向量中第一个边的权重, 或在这种情况下为 B-C。

问题是,我C++不是很流利,而且我也是提升和图表的新手。我尝试查看 boost 网站上的示例代码,但它们都使用数组而不是向量。我确实尝试了此示例代码:

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

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

有谁知道如何创建一个带有边、顶点和权重向量的图形,我最终可以使用 Dijkstra 的提升版本?

抱歉,如果这个问题真的很模糊或基本,我真的对使用 boost 和实现图形一无所知。

从文档中:

类型图必须是顶点列表图和发生率图的模型。

还有一个使用adjacency_list图的例子。

当您将该示例中的listS替换为vecS时,将返回完全相同的响应(不过,我尚未检查此更改的所有代码是否合理(


typedef adjacency_list<vecS, vecS, undirectedS> Graph;

从这条线上看,边缘上似乎没有weight属性。Dijkstra在没有这些信息的情况下选择最佳路径将是令人困惑的。通过快速浏览文档,我认为您可以提供外部weight图。另请注意:

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