使用提升实现带有向量的图形
Implementing a graph with vectors using boost
我正在尝试使用带有三个独立向量的 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 算法。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 从流到邻接列表的向量读取图形
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- 如何使用向量的向量来读取图形
- 提升图形库 - 来自外部向量的权重属性
- 使用提升实现带有向量的图形
- C++ 提升图形库:构建在无向图形搜索中访问的顶点的向量
- 在柠檬图形库中访问向量中的映射值
- c++中向量与列表的图形表示
- 使用向量<vector>在 C++ 中表示图形
- 图形实现c++与无大小的向量