C++ - 我应该为 Dijkstra 使用什么数据结构?

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

任务是:

找到两个城市之间的最短路径。城市与单行道相连。 城市以这种方式存在于 .txt 文件中:

// From // // To // // Distance //

例如:

London Glasgow 180

Manchester Liverpool 80

York Cambridge 415

York Manchester 260

Glasgow York 315

Glasgow Manchester 315

给定源城市 S 和目标城市 T,求最短路径。计算距离并检索所走的路径。

问题是:我根本不允许使用任何STL容器。不能使用 std::list、std::vector、std::pair、std::set 等容器。但是,我可以使用自己实现的动态数据结构。

我不知道应该实现哪些数据结构以及如何实现它们。 另外,我应该使用优先级队列、堆还是其他东西? 还想知道邻接表或邻接矩阵。

我真的不在乎解决方案是否经过优化。

我一直在谷歌搜索,但我发现所有 Dijkstras 算法实现都使用了大量的 STL 容器,我不允许使用这些容器。

感谢任何提示、提示或链接。谢谢。

要编写 Dijkstra 的最短路径算法,您只需实现一个优先级队列(最小堆)。

我首先推荐堆。集合的实现涉及(几乎)平衡二叉搜索树,如 AVL 或 Red-Black Tree 或 Treap(笛卡尔树),此类代码比实现堆要难几个数量级。此外,所有这些解决方案都具有相同的 运行 时间 O(log n),因此更容易编写解决方案。