过去几天我试图实现这个算法。到目前为止,我已经设法制作动态二维数组并插入节点之间的距离,一个删除节点之间路径的函数和一个告诉我两个节点之间是否存在路径的函数。 现在我想实现一个函数,它返回从节点A到节点B的最短路径。我知道dijkstras算法是如何工作的,我已经在wiki上读取了伪代码而不能自己编写任何代码。我真的被困在这里了。
我一直在考虑代码应该是什么样子以及应该发生什么,这就是为什么我已经创建了这个函数,它告诉我两个节点之间是否存在路径。我是否还需要更多帮助功能才能更轻松地实现dijkstras?
现在我只有3个节点,但我想编写的代码通常需要为n个节点工作。
感谢任何形式的帮助。
答案 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)
编辑:代码已删除,我将提供提示:
vector < vector < pair<int,int> > > g (n);
)O(m log(n))
复杂度) 注意:如果你想获得最小路径,那么保留一些vector<int> previous
,每次更新顶点距离(比如v
)设置{{1 }}。您的路径是previous[v] = index of vertex from where you came here
,顺序相反。