给定V顶点:V1,V2,V3 ....,V300。对于小于j的所有i,存在从Vi到Vj的边缘,并且给予每个这样的边缘的权重。我们必须从V1开始找到k长度路径(即,精确访问k个顶点)并且可以在任何其他顶点处结束,使得权重最小。
我用dp尝试过Bruteforce,这给了我很慢的O(2 ^ n)。
答案 0 :(得分:3)
您可以使用图表是非循环的这一事实来获得O(n ^ 3)
时间复杂度的动态编程解决方案。
我们假设f(v, length)
是以v
顶点结尾并且包含正好length
个顶点的路径的最小权重。最初,f(v, 1) = 0
适用于所有v
(因为只有一个顶点的路径具有权重0
)。然后,您可以迭代从1
到n
的所有顶点来计算f
值:
for i = 1 ... n
for j = 1 ... i - 1
for length = 1 ... k
f(i, length + 1) = min(f(i, length + 1), f(j, length) + dist(j, i))
对于所有min(f(v, k))
,答案为v
。