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

时间:2015-08-19 19:53:23

标签: c++ vector graph 2d dijkstra

我希望能够通过这样做来访问边缘的权重:

int edgeWeightOfTwoVertexes = weights[vertexA][vertexB];

vertexAvertexB是我vertex班级的对象。那么我如何初始化2D矢量以使其工作?

我从未见过一个非整数值访问的向量/数组元素,所以我想知道这样的事情是否可行。如果没有,还有哪些其他建议可以存储并快速访问边缘权重?

1 个答案:

答案 0 :(得分:1)

您可以将边缘表示为

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一个从0到顶点数的id,然后你可以使用它们来索引

weights[vertexA.id][vertexB.id]