【发布时间】:2013-06-10 10:13:04
【问题描述】:
笛卡尔平面中任意两点之间的最小曼哈顿距离是各自 X 轴和 Y 轴的绝对差之和。例如,如果我们有两个点 (X,Y) 和 (U,V),那么距离将是:ABS(X-U) + ABS(Y-V)。现在,我应该如何确定仅平行于坐标轴移动的几对点之间的最小距离,以便不需要在所选路径中访问某些给定点。我需要一个非常有效的算法,因为避免点的数量可以达到 10000 个,并且查询数量的范围相同。点的坐标将小于 ABS(50000)。一开始我会得到一组要避免的点,所以我可能会使用一些离线算法和/或预计算。
例如,(0,0) 和 (1,1) 之间的曼哈顿距离是 2 从路径 (0,0)->(1,0)->(1,1) 或 (0, 0)->(0,1)->(1,1)。但是,如果我们的条件是 (1,0) 和 (0,1) 不能被访问,则最小距离增加到 6。这样的一条路径将是:(0,0)->(0,-1 )->(1,-1)->(2,-1)->(2,0)->(2,1)->(1,1)。
【问题讨论】:
-
“选定路径中的某些点不需要访问”是什么意思?
-
如果 (1,0) 和 (0,1) 不需要被访问,那么 (0,0) 和 (1,1) 之间的曼哈顿距离将不再保持 2. 简单原因因为我无法访问最小路径所需的点。在这种情况下,答案是 6。
-
所以你的意思是那些点是障碍?
-
是的!而且,我们显然必须沿着坐标点移动才能获得曼哈顿距离。
-
@divanshu 讲这么多是没有意义的。首先
O(10^9)是O(1)- 你误用了那个符号。其次,您所描述的是寻路。人们一直在建议标准的寻路算法,而您似乎拒绝了它们。 -- 您的问题与标准寻路问题有何不同?
标签: algorithm coordinate-systems