[英]How to represent edge weights in Dijkstra's algorithm using 2D vector
我希望能夠通過執行以下操作來訪問邊緣的權重:
int edgeWeightOfTwoVertexes = weights[vertexA][vertexB];
vertexA
和vertexB
是我的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.