问题:
我们在 2D 平面上给定一组 N 个点,我们必须找到一条路径,它按照 1-2-3....N 的顺序访问所有点并返回 1,从而使所用时间最小化。我们可以向北、东、西或南移动一步,这需要 1 个单位的时间。我们不能多次访问 N 个点中的任何一个,除了 1,我们不能访问超过两次。
N <= 100
每个点的 x 和 y 轴 <= 1000000
(这是在过去的 USACO 比赛中出现的完整问题陈述)
我的算法:
点的 x 轴和 y 轴可能非常大,但只有 <=100 个点,因此,我们更改点的 x 轴,以便当它们按 x 轴的升序排列时,x 轴之间的差异相邻点为 1。我们对这些点的所有 y 轴执行相同操作。
现在我们找到从点 1 到 2、从 2 到 3、...以及从 N 到 1 的最短路径,而无需访问除源和目标之外的任何给定点。我们不能使用直接的 bfs 来找到最短路径,因为从点 x,y 到点 x+1,y 的距离不是 1,而是 x+1 的原始值减去 x 的原始值。所以我使用 Dijktra 的算法和二进制堆来找到最短路径。
但是这个算法对一半的测试用例不起作用,它输出的解大于正确的解。
为什么这个算法是错误的?否则我们如何解决这个问题?