如何使用 2D 向量在 Dijkstra 算法中表示边权重
How to represent edge weights in Dijkstra's algorithm using 2D vector
我想通过这样做来访问一条边的权重:
int edgeWeightOfTwoVertexes = weights[vertexA][vertexB];
vertexA
和vertexB
是我的vertex
类中的对象。那么我该如何初始化二维向量来让它工作呢?
我从来没有见过一个非整数值访问的向量/数组元素,所以我想知道这样的事情是否可能。如果没有,有什么其他的建议来存储和快速访问边权值?
你可以用
std::pair<int, int> // first = source, second = destination
那么边权值可以是
std::map<std::pair<int, int>, int> weights;
其中键是你的边(由开始和结束节点指定),值是代价。所以你可以说
int edgeWeightOfTwoVertexes = weights[{vertexA, vertexB}];
否则如果你想用2D向量,你就会有
std::vector<std::vector<int>> weights;
然后你可以像
那样访问它int edgeWeightOfTwoVertexes = weights[vertexA][vertexB];
,但要知道,通常这些图最终非常稀疏,这不是有效使用内存。
编辑
如果你的顶点是一些Vertex
类的实例,我会给每个Vertex
一个id,从0
到顶点数,然后你可以使用这些来索引
weights[vertexA.id][vertexB.id]
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何将ampl中的集合表示为c++中的向量
- std::is_base_of表示ctor编译错误
- 输入中的字符串数未知(以字母表示)
- 我可以信任表示整数的浮点或双精度来保持精度吗
- c++模板来表示多项式
- 询问在设计我的手臂模拟器功能表示格式1
- CMakeLists.txt中的命名空间表示法
- D3D11-将混合权重和索引传递到顶点着色器
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 如何计算Big-O表示法中的平均渐近运行时间
- 我应该如何表示我拥有的连续元素序列?
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 表示类模板C++空类型
- 具有所表示类的相同构造函数签名的代理类模板
- 嵌套在循环中的两个循环的 big-O 表示法
- 具有引用成员的结构是否具有唯一的对象表示形式
- 使用 int 表示浮点除法 C++
- 如何使用 2D 向量在 Dijkstra 算法中表示边权重