【发布时间】:2014-08-28 15:04:04
【问题描述】:
我有以下问题:
给定平面上的点集 P = { (x1, y1), (x2, y2), ..., (xn, yn) },找到具有以下性质的最短路径:
- 从P中最左边的点L开始(x坐标最小)
- 它通过x坐标增加的点到达最右边的点R(x坐标最大)
- 然后它通过 x 坐标递减的点从 R 回到 L
- 它访问来自 P 的所有点
我们可以假设所有点都有不同的 x 坐标。
另外我假设每个点只能访问一次(但我不确定它是否不符合上述属性)。
我开发了以下算法:
1. sort points in P by the x coordinate
2. start two paths in the left most point L
3. for each p in P:
4. extend path that has last point closest to p
5. connect shorter path with R with edge X
但事实证明这是错误的。路径可以相交,当它们相交时,总会有更好的路径,可以通过切换相交段的端点来构建。如何解决?
【问题讨论】:
-
即,您想找到一个最小长度bitonic tour。维基百科建议这在 CLRS 中作为一个练习出现,这与我的记忆相吻合。
标签: algorithm computational-geometry shortest-path