我试图用三个不同的向量使用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的增强版本?
很抱歉,如果这个问题非常模糊或基本,我真的不知道如何使用提升和实现图表。
答案 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算法。