簡體   English   中英

C++ - 我應該為 Dijkstra 使用什么數據結構?

[英]C++ - what data structures for Dijkstra's should I use?

任務是:

找到兩個城市之間的最短路徑。 城市與單行道相連。 城市以這種方式存在於 a.txt 文件中:

// 從 // // 到 // // 距離 //

例如:

倫敦 格拉斯哥 180

曼徹斯特利物浦 80

約克劍橋 415

約克曼徹斯特 260

格拉斯哥約克 315

格拉斯哥 曼徹斯特 315

給定源城市 S 和目標城市 T,找到最短路徑。 計算距離並檢索所采用的路徑。

問題是:我根本不允許使用任何 STL 容器。 不能使用 std::list、std::vector、std::pair、std::set 等容器。但是,我能夠使用我自己實現的動態數據結構。

我不知道我應該實現哪些數據結構以及如何實現它們。 另外,我應該使用優先級隊列、堆還是其他東西? 還想知道鄰接表或鄰接矩陣。

我真的不在乎解決方案是否經過優化。

我一直在谷歌搜索,但我發現所有 Dijkstras 算法實現都使用大量 STL 容器,我不允許使用這些容器。

任何提示、提示或鏈接都將受到贊賞。 謝謝你。

要編寫 Dijkstra 的最短路徑算法,您只需要實現一個優先級隊列(最小堆)。

我首先推薦堆。 集合的實現涉及(幾乎)平衡的二叉搜索樹,如 AVL 或紅黑樹或 Treap(笛卡爾樹),這樣的代碼比實現堆要難幾個數量級。 此外,所有這些解決方案都具有相同的運行時間O(log n) ,因此更容易編碼的解決方案首先出現。

暫無
暫無

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

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