使用堆栈查找加权图的最短路径

时间:2013-11-15 19:06:42

标签: c++ algorithm graph shortest-path

我会得到某种图表,如下图所示。我已经搜索了一些算法,但它接缝似乎不可能让我弄清楚它们。实际上使用Floyd–Warshall algorithm它是有可能的,但不幸的是我只允许使用堆栈(而不是矩阵)。我也找了Dijkstra's algorithm,但我无法与我的问题建立关系。picture

显然,我的目标是让所有最短路径从一个点到另一个点。正如我所提到的,我将从矢量字符串中的堆栈输出解决方案。我想我必须访问每个节点,我最担心的是在搜索过程中陷入循环甚至丢失轨道。 另请注意,这是不是有向图。如果Dijkstra的算法在这里适用,我将非常感激,如果你们中的任何人都会指导我,我将非常感谢任何帮助,建议,想法,甚至是一个没有陷入循环或在搜索时失去轨道的愿景。

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您只想拥有从某个选定节点到所有其他节点的所有最短路径的值,您可以使用Dijkstra算法 - 它基本上是增强的BFS。一旦你了解BFS背后的想法,你就不应该对理解Dijkstra有任何问题。实际上,使用单个queue而不是arrays实现BFS要容易得多。 是否必须使用stacks是正式的(学校?)要求。如果是这样,那就很奇怪......但是你仍然可以用非常低效的方式模仿queue,其中有两个stacks

(顺便说一句,DFS使用堆栈)

如果你想拥有从所有节点到所有其他节点的所有最短路径,你可以从每个节点运行Dijkstra,或者你可以尝试更快一点的Bellman-Ford,但有点难以掌握。

如果您只想从单个节点到其他节点的最短路径,(位增强)双向BFS将是最佳选择。

如果你有Silverlight插件,你可以用我写的50%来试试这个小应用程序: http://grzesiaka.home.pl/GraphTutor/你会发现你感兴趣的算法(包括数据结构和伪代码)的逐步演示。希望它可以帮到你!