最低曼哈顿距离与某些阻挡点

时间:2013-06-13 21:01:44

标签: algorithm coordinate-systems

笛卡尔平面中任意两点之间的最小曼哈顿距离是相应X轴和Y轴的绝对差值之和。比如,如果我们有两个点(X,Y)和(U,V)那么距离将是:ABS(X-U)+ ABS(Y-V)。现在,我应该如何确定仅平行于坐标轴移动的几对点之间的最小距离,以便在所选路径中不需要访问某些给定点。我需要一个非常有效的算法,因为避免点的数量可以达到10000,查询数量的范围相同。点的坐标将小于ABS(50000)。我会在开始时给出一些要避免的点,所以我可能会使用一些离线算法和/或预计算。

例如,(0,0)和(1,1)之间的曼哈顿距离是路径(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)

2 个答案:

答案 0 :(得分:2)

这个问题可以通过广度优先搜索或深度优先搜索来解决,广度优先搜索是标准方法。你也可以使用A *算法,它可以在实践中提供更好的结果,但理论上(最坏的情况)并不比BFS好。

这是可以证明的,因为你的问题减少了解决迷宫的问题。显然你可以有很多障碍,网格基本上变成了迷宫。众所周知,BFS或DFS是解决迷宫的唯一方法。有关详细信息,请参阅Maze Solving Algorithms (wikipedia)

enter image description here

我的最终建议:使用A *算法并希望获得最佳效果。

答案 1 :(得分:0)

您不了解此处的解决方案,或者我们不了解问题:

1)你有一架笛卡尔飞机。因此,每个节点恰好有4个相邻节点,由x +/- 1,y +/- 1(忽略边缘)给出

2)做一个BFS(或DFS,A *)。所有你可以遍历的是x / y +/- 1.预存10000个障碍,然后检查节点x / y +/- 1是否可按需访问。你不需要真正的图形对象

如果它太慢,你说你可以进行离线计算 - 10 ^ 10只需要1.25GB来存储索引的障碍查找表。让算法运行?

我哪里错了?