Dijkstra的算法带有2d阵列

时间:2011-05-10 06:49:50

标签: c++ multidimensional-array dijkstra

过去几天我试图实现这个算法。到目前为止,我已经设法制作动态二维数组并插入节点之间的距离,一个删除节点之间路径的函数和一个告诉我两个节点之间是否存在路径的函数。 现在我想实现一个函数,它返回从节点A到节点B的最短路径。我知道dijkstras算法是如何工作的,我已经在wiki上读取了伪代码而不能自己编写任何代码。我真的被困在这里了。

我一直在考虑代码应该是什么样子以及应该发生什么,这就是为什么我已经创建了这个函数,它告诉我两个节点之间是否存在路径。我是否还需要更多帮助功能才能更轻松地实现dijkstras?

现在我只有3个节点,但我想编写的代码通常需要为n个节点工作。

感谢任何形式的帮助。

3 个答案:

答案 0 :(得分:5)

你可能想的很多。

你需要2件事。您理解的干净图形结构。您理解的算法的良好描述。 如果你有两个。刚开始写一些代码。所需的助手将在途中变得明显。

- 编辑 -
您可能需要以下一些数据结构 std::vector std::list std::priority_queue

答案 1 :(得分:2)

我找到了这个算法的几个代码,但为了更好地处理它可能是最简单的代码,所以你可以检查你和这个之间的差异,并完成你的。按程序编程总是更好。

看看这个,看看它是否有帮助。

http://vinodcse.wordpress.com/2006/05/19/code-for-dijkstras-algorithm-in-c-2/

祝你好运。

答案 2 :(得分:2)

编辑:代码已删除,我将提供提示:

  1. 将图形存储为每个顶点的邻接列表的列表。 (像这样vector < vector < pair<int,int> > > g (n);
  2. 使用一些数据结构来跟踪当前状态下距离最小的顶点。 (可能已设置,或者priority_queue具有O(m log(n))复杂度)
  3. 每次获取high_priority顶点(顶点具有最小当前距离),将其从data_structure中删除并更新相邻删除的一个顶点的距离。

  4. 注意:如果你想获得最小路径,那么保留一些vector<int> previous,每次更新顶点距离(比如v)设置{{1 }}。您的路径是previous[v] = index of vertex from where you came here,顺序相反。