给定一个排序数组,A
例如{4,9,10,11,19}
。搬家的成本i->j
是abs(A[j]-A[i])
。从给定元素开始,例如10
。在不访问相同元素两次的情况下找出成本最低的路径。所以在这个例子中,解决方案是10->9->4->11->19
ie 1 + 5 + 7 + 8 = 21
。
我尝试使用最近邻方法来解决这个问题。
i = start;
While (array is not empty)
ldiff = A[i] - A[i-1]
rdiff = A[i+1] - A[i]
(ldiff < rdiff) ? sum += ldiff : sum += rdiff
remove A[i]
此解决方案并非在所有情况下都有效。我已经意识到这是 TSP 问题。解决这个问题的最佳方法是什么?我应该使用像 Christofides 这样的 TSP 启发式算法还是其他算法?