【发布时间】:2015-10-27 03:57:48
【问题描述】:
我想通过附加约束找到两个顶点之间的最短路径:最多可以访问 n 个顶点。该图是有向的、连通的、非负权重的,并且可能包含循环。
例子:
- n = 2 的最短路径 0->2 是 18
- n = 3 的最短路径 0->3 是 22
- n = 4 的最短路径 0->3 是 9
到目前为止,我已经实现了 Djikstras 算法来获得简单的最短路径,我的想法是保留当前访问的顶点的计数器,如果它超过 n 则需要退一步或多步并尝试使用另一条路径.. 但据我所知,Djikstras 不能用于回溯,如 here 所述。
另一个想法是以某种方式将每个节点之间的每个路径存储在一个表中。但我不太确定 Djikstra 如何发现权重为 18 的路径 0->2,因为它并不是真正的最短路径...
有人知道如何解决这个问题吗?
【问题讨论】:
-
如何计算像你提到的那样访问了多少个顶点,而不是回溯将其作为权重的一部分?每走一步,重量都应该增加。不过,您必须以某种方式对其进行规范化。
标签: java algorithm graph graph-theory graph-algorithm