簡體   English   中英

在網格上實現類似Dijkstra的算法

[英]Implementing Dijkstra-like algorithm on grid

我正在嘗試編寫在網格上運行的算法。 它與Dijkstra的算法相似,但略有不同。

網格中的每個點都被占用或空閑。 我想檢查所有距起點小於一定距離的可到達點。

我假設我可以平行於網格線或對角線旅行,分別花費1和sqrt(2)。

最簡單的方法是,如果我有一個按值排序的地圖。 這樣,我可以將關鍵點設置為每個點的坐標,將值設置為到目前為止計算的到該點的距離。 我只需要彈出最短距離的條目,然后查找並更新相鄰點的最遠距離即可。

這樣的容器不存在,所以我一直在考慮可以合並哪些容器以使我具有相同的行為,但是我很難提出任何可行的方法。

我當時在想我可以有一個unordered_set或unordered_map來快速檢索每個點的遠距離。 對於unordered_set,我可以定義一個gridNode對象,其中包含該點的位置和當前距離。

然后,我可以得到一個向量,將其排序並用於查找最短距離。

我只是不確定如何使這兩個容器保持一致。 向量是否包含指向unordered_set中條目的指針? 向量可以包含網格點的坐標,我可以編寫std :: sort以便它使用unordered_map正確排序嗎?

任何想法,將不勝感激。

在處理Dijkstra和類似Dijkstra的算法時, 優先級隊列是您的朋友。 標准C ++使用std::priority_queue提供了一種實現。 您必須存儲成對的坐標和距離,並定義一個自定義比較器,該比較器僅比較成對的值。

暫無
暫無

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

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