在路径中找到最小三个节点并以起始节点结束的最小距离?

时间:2016-02-11 10:55:12

标签: algorithm graph-algorithm pseudocode

我遇到了一个问题,即找到解决问题的最佳算法:在图表中找到从起点到起点(制作一个周期)的最小路径,并访问图中最少的三个不同节点。例如,如果我们的图表G(V,E)包含V={a,b,c,d,e}且边E={(a,b,16),(a,c,300),(a,d,1),(b,c,100),(b,e,15),(c,a,10),(e,c,20)},则最短距离为61,并且会访问a->c->e->b->a

我想将Dijkstra's algorithm用于加权图,但我不知道如何实现约束条件以访问最少3个节点?它看起来像汉密尔顿循环问题,但没有使用所有节点,只有部分节点。这是NP完全问题吗?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

实现这一目标的一种简单方法如下:

  1. 预先计算所有对最短路径(例如,使用Floyd–Warshall或为每个可能的起始节点运行Dijkstra)
  2. 对于图中不同节点的每个元组(a,b,c),考虑从a到b,b到c和c到a的最短路径的串联。
  3. 报告所有检查路径的最小值。
  4. 运行时将由第二步控制,它具有运行时O(n 3 )。所以不,问题不是NP难,因为我们必须访问的不同节点的数量是固定的(在这种情况下,3)。