我的朋友把这个给我当脑筋急转弯,但我不知道如何在不使用暴力的情况下解决这个问题。
假设我们得到了一个哈密顿循环,在通过m个其他顶点v1到vm之后,这个哈密顿循环开始和结束于p0但现在我们想把这个周期分成两个基本上不相交的周期。两个循环的起始点和结束点都在p0处,但是v1到vm在这两个循环之间被分割,以最小化总行驶距离。唯一的条件是,如果i我知道这是可能的,如果我们检查所有的潜在划分顶点之间的两个周期。但这似乎很慢。
最佳答案
您可以在O(m^2)
时间内使用动态编程来解决这个问题(甚至更快我没有试着改进它)。其思想是,对于每个i
和j
和i < j
使用W[i][j]
,您可以计算最佳的v[i]
方法来构造一条到v[j]
的路径和另一条到v[1]
的不相交路径,其中这两条路径将使用从v[j]
到v[j]
的所有顶点。只需查看路径中以W[i][m]
结尾的第二个到最后一个顶点的可能性,就可以有效地计算这些值。
最后,考虑每个i
的p[0]
,然后返回,关闭两条路径,就可以看到结果。然后你选最好的。
关于algorithm - 最优地划分哈密顿周期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26962178/