如何使用 2D 向量在 Dijkstra 算法中表示边权重

How to represent edge weights in Dijkstra's algorithm using 2D vector

本文关键字:表示 权重 算法 Dijkstra 何使用 2D 向量      更新时间:2023-10-16

我想通过这样做来访问一条边的权重:

int edgeWeightOfTwoVertexes = weights[vertexA][vertexB];

vertexAvertexB是我的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]