用 C++ 编写 Dijkstra 算法

Posted

技术标签:

【中文标题】用 C++ 编写 Dijkstra 算法【英文标题】:Programming Dijkstra's algorithm in C++ 【发布时间】:2015-11-12 15:19:40 【问题描述】:

我有一个任务,给我一个图表,并且必须使用一个二维数组并找到从“Macomb”到“Chicago”的最短路径。我很难弄清楚我应该如何开始。

我看了一些视频,我觉得我已经掌握了 Dijkstra 算法的工作原理,但是把它变成代码让我很难过。

我为我的图创建了一个邻接矩阵,其中我使用“99”来表示不存在的边,我为前辈列表创建了一个数组,并为剩余的顶点创建了一个数组。我应该将每个新添加输出到最佳路径,以及每个添加到最佳路径的当前成本。最后应该是这样的:

路径:马科姆 费用:0 路径:Macomb --> 希望 费用:2 路径:Macomb --> 希望 --> 爱 费用:4 路径:马科姆 --> 希望 --> 爱 --> 和平 费用:5 路径:Macomb --> 希望 --> 爱 --> 和平 --> 信仰 费用:6 路径:马科姆 --> 希望 --> 爱 --> 和平 --> 信仰 --> 芝加哥 费用:8

这是我必须开始的代码:

#include <iostream>

using namespace std;



int main()

int graph[6][6] = 99,2,9,5,99,99,
                   2,99,4,2,99,99,
                   9,4,99,1,1,5,
                   5,2,1,99,4,99,
                  99,99,1,4,99,2,
                  99,99,99,99,2,99;
string pred[6] = "Macomb", " ", " ", " ", " ", " ";
string cities[5] = "hope", "peace", "love", "belief", "Chicago";
int distance[6];


我不是在找人来编写我的作业,但我希望能朝着正确的方向努力,因为这是一项艰巨的任务。这是一个基本的数据结构类,我们一直在使用的唯一#include 是代码中的内容,因此答案越简单越好。

谢谢!

【问题讨论】:

rosettacode.org/wiki/Dijkstra's_algorithm#C.2B.2B this 也是一个很好的解释,带有一些代码。 【参考方案1】:

这是我对 Dijkstra 算法的实现。

https://github.com/Jesusfer2575/Reference/blob/master/dijkstra.cpp

尽情享受吧!

【讨论】:

欢迎来到 Stack Overflow。请查看***.com/help/how-to-answer 和***.com/help/deleted-answers 了解为什么这种仅链接的答案可能会被否决或删除。

以上是关于用 C++ 编写 Dijkstra 算法的主要内容,如果未能解决你的问题,请参考以下文章

最短路径 深入浅出Dijkstra算法(一)

最短路径 - Dijkstra算法

最短路径算法(Dijkstra)

用C++求dijkstra算法求最短路径

Floyd算法

POJ-1135 Domino Effect---最短路Dijk