感谢所有人 -
马克西姆
答案 0 :(得分:3)
有几个选项,包括:Nearest Neighbor,Christofides和Lin–Kernighan。
如果这些失败,您可以随时使用专家的code(学术研究人员免费)。
答案 1 :(得分:0)
我想你可以尝试贪婪的方法,选择一个任意点来开始(如果没有指定起点),然后在每一步你前往最近点到你当前的点。假设点之间的距离可以在恒定时间内计算,那么您可以在O(n ^ 2)时间内找到路径。
为了澄清,以下伪代码应该有所帮助(我暂时没有写过这种东西,所以我希望这很清楚)
Name: GreedyPath(C, p)
Input: C - a non-empty collection of points to visit
p - a starting point in C
Output: S - a sequence of points covering C
Algorithm:
Remove p from C
If C is empty
Return the sequence containing only p
Else
Let p1 be the closest point to p in C
Let S = GreedyPath(C, p1)
Append p to the start of S
Return S
显然,耗时的部分是每次都找到最接近p
的点,但对于n
点,这应该只需要n(n-1)/2
距离计算(除非我弄错了)。< / p>