簡體   English   中英

如何使用2D向量在Dijkstra算法中表示邊緣權重

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

我希望能夠通過執行以下操作來訪問邊緣的權重:

int edgeWeightOfTwoVertexes = weights[vertexA][vertexB];

vertexAvertexB是我的vertex類中的對象。 那么,如何初始化2D向量才能使其起作用?

我從未見過向量/數組元素被非整數值訪問,所以我想知道是否可以進行這種操作。 如果沒有,還有什么其他建議可以存儲並快速訪問邊緣權重?

您可以將邊緣表示為

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到Number of vertexs的ID,那么您可以使用這些ID進行索引

weights[vertexA.id][vertexB.id]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM