![](/img/trans.png)
[英]What data structures should I use if I want to implement a meet in the middle attack in C++?
[英]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.