我的朋友把这个作为一个脑筋急转弯告诉了我,但是如果没有蛮力的话,我怎么处理这个问题。
我们假设我们在经过m个其他顶点v1到vm之后给出了一个哈密顿循环,它在p0开始和结束。但是现在我们想把这个循环分成两个很大程度上不相交的循环。两个循环在p0处开始和结束,但是v1到vm在两个循环之间被分区,以便最小化总共行进的距离。唯一的条件是,如果我< j,然后vi< vj必须在任何给定的循环中保持为真。任意两个顶点之间的距离函数是任意的,距离(i,j)=距离(j,i)。
我知道如果我们检查两个周期中所有可能的顶点分区,这是可能的。但这似乎很慢。
答案 0 :(得分:1)
您可以在O(m^2)
时间使用动态编程解决此问题(也许您更快?我没有尝试改进它)。我们的想法是,对于每个i
和j
i < j
,您计算构建W[i][j]
的一条路径的最佳方式v[i]
以及另一条v[j]
的不相交路径{1}},其中两条路径用完了从v[1]
到v[j]
的所有顶点。通过查看以v[j]
结尾的路径中倒数第二个顶点的可能性,可以有效地计算这些。
最后,您会考虑每个W[i][m]
i
,并通过返回p[0]
来关闭两条路径,从而看到您获得的结果。然后你选择最好的一个。