有人问我以下问题:你有N个点,其中两个是"起点"one_answers"出口"您希望从"开始"开始,遍历其他每个节点,并在"退出"结束。如果N个节点形成的多边形是凸的,那么最短路径(使用欧几里得距离(是什么?这里有比暴力更好的算法吗?
第1版:
这是2016年TAP(阿根廷编程比赛(中提出的一个问题,今天我提到了这个问题。我怀疑这里一定有一个比brueforce更好的算法使用凸性,否则他们不会在竞争中要求它。此外,对于N的约束是N<400,所以它不能用O(n!(溶液解决
第2版:
一个有趣的案例是:考虑一个非常长又窄的矩形,其中点在矩形的长边上,一个在另一个前面。起点和出口位于"隧道"的两端顺时针或逆时针旋转,最终会移动2*L,其中L是矩形长边的大小。从开始到结束做一个Z字形是最好的,因为你只需要通过一次L,然后从一边到另一边走一些小步。
这里有比暴力更好的算法吗
如果你认为这个问题与动态编程有关,你可以得到一个解决方案O(n^2(,它可以解决约束n<400。
这个链接有一个很好的解释,参见问题B:https://caloventorendos.blogspot.com/2016/09/solucionario-tap-2016.html