有人问我以下问题: 您有N个点,其中两个是“开始”和“退出” 您想从“开始”开始,经过每个其他节点,然后在“出口”结束。如果由N个节点形成的多边形是凸的,最短路径(使用欧几里得距离)是什么?这里有没有比蛮力更好的算法?
edit1:
这是2016年在TAP(阿根廷编程竞赛)中提出的一个问题,今天已被提及。我怀疑这里必须使用凸性属性,而不是蛮力算法,否则他们不会在比赛中问它。而且N的约束条件是N <400,因此用O(n!)解决方案无法解决
edit2:
一个有趣的案例是: 考虑一个非常长且窄的矩形,其中的点在矩形的长边上,一个在另一个的前面。 起点和出口在此“隧道”的相对两端 顺时针或逆时针旋转,您最终将经过2 * L,其中L是矩形长边的大小。 在这里从头到尾进行锯齿形调整是最佳选择,因为您只需经历一次L,然后从一侧到另一侧走一些小步。
答案 0 :(得分:0)
在这里,有没有比蛮力更好的算法?
如果您认为动态编程存在此问题,则可以获得解决方案 O(n ^ 2),该解决方案可以解决约束 n < 400 。
此链接有一个很好的说明,请参阅问题B:https://caloventorendos.blogspot.com/2016/09/solucionario-tap-2016.html