【发布时间】:2013-11-15 19:06:41
【问题描述】:
我将得到如下图所示的某种图表。我搜索了一些算法,但似乎我无法弄清楚它们。事实上使用Floyd–Warshall algorithm 是有可能的,但不幸的是我只被允许使用堆栈(而不是矩阵)。我也找了Dijkstra's algorithm,但我找不到与我的问题的关系。
显然我的目标是让所有最短路径从一个点到另一个点。正如我所提到的,我只会将我的 stack 中的解决方案输出为向量字符串。我想我必须访问每个节点,我最害怕的是在搜索过程中被堆叠成一个循环甚至丢失轨道。 另请注意,这不是有向图。如果 Dijkstra 的算法适用于这里,我将非常感激你们中的任何人能指导我,我非常感谢任何帮助、建议、想法甚至是在搜索时不陷入循环或丢失轨道的愿景。
提前致谢。
【问题讨论】:
-
可能更适合cs.stackexchange.com
-
边缘是否未加权?
-
没有。它们是加权的
-
如果边权重为正,您可以在 O(n^2) 中实现 Dijkstra 算法,仅使用几个辅助数组来存储最短路径长度、路径上的前一个节点和一个布尔数组,用于标记已知最短路径的节点。我看不出任何堆栈的使用。
-
如果我们假设从 P 到 F 的最短路径:“PKCBICF”,我们将使用堆栈来推送或弹出节点的名称。如果我们使用 bool 数组来标记节点,我们可以看到节点“C”已经被访问了两次。 // 节点“C”是图中最大的一个,几乎看不到
标签: c++ algorithm graph shortest-path