也许这就是原始海报通过“手动迭代每种可能性并存储最短路径”的意思,但我想我想明确什么似乎是基线解决方案。
假设你已经有一个两点最短路径算法——这有各种图形的经典解决方案。假设所有距离都是非负的并且 d(A->B->C) = d(A->B) + d(B->C)。
要点是从 S 开始的路径经过中间城市“abcd”之一并以 E 结束:
例如 SabcdE、SacbdE 等...
只有 4 个中间城市,您可以枚举所有 24 个排列。对于每个排列,使用最短的两点算法来计算从头到尾的路径及其总距离。
然后给定起点和终点,有 12 种可能性附加到 abcd 之一,并且对于内部的每两种可能性。您已经计算了这些距离,因此您添加了从 S 到头部的距离和从尾部到 E 的距离。选择最小值。因此,一旦您预先计算了一组固定的内陆城市的中间距离,您就需要为任何一对起点和终点做 12 个两点最短路径问题。
随着中间城市数量的增加,这显然无法扩展。我不清楚它是否可以做得更好,除非您对图结构施加更大的限制(这是在物理欧几里得空间中吗?三角不等式?)。
我的思想示例:假设城市之间的所有中间距离都是 O(1)。对图没有限制,那么从 S 到任何中间城市的距离可能是 1000,除了一个是 1。尾巴也是如此。所以你可以强制第一个被访问的城市是任何东西。现在,往下一层,以第一个城市为“起点”。应用相同的论点:您可以通过操纵图中的距离使最佳路径前往以下任何城市。
因此,如果没有额外的假设,似乎无法帮助复杂性。