繁体   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