用于最短路径的A *(星)搜索算法

时间:2012-01-09 18:39:14

标签: java android search routing a-star

基本上我有一组包含gps坐标的节点,我如何以这样的方式实现A *搜索,我可以使用这个地理位置将它们相互比较,并通过指定距离来找到最短路径指向另一个。

更新:2012年11月1日

我正在尝试绘制最短路径路径,通过所述算法遍历每个节点来实现此目的,并比较遍历的节点的距离以找到最短路径。另一个问题是我无法在Android / Java中找到正确的A *搜索实现。我现在的问题是:

  1. 由于我将保存每个道路交叉点的地点(节点),我应该将它存储在数组或链接列表中吗?

  2. 现在我们能够计算每个节点的距离但不能动态计算。我应该怎么做才能在使用A *搜索计算最短路径时使用它。

3 个答案:

答案 0 :(得分:2)

两点之间的

欧氏距离(即直线距离)可能是一个很好的启发函数。

Wikipedia上查找A *搜索的详细信息。

A *搜索实际上是对 Dijkstra算法的修改,用于查找单一来源最短路径。唯一的区别是A *搜索使用指导搜索的启发式函数,修剪不必要的搜索树分支。应该以这样一种方式设计一个好的启发式函数,使其值在任何搜索路径上都是单调的。它不应该高估两个州之间的实际距离。由于欧几里德距离是两点之间的最小可能距离,因此不可能高估两点之间的距离。

有关欧几里德距离的更多信息,请参阅here。要将其应用于地理坐标,请参阅here

答案 1 :(得分:0)

你到底想要完成什么? A *是启发式搜索算法,例如,用于游戏中寻找下一个“最佳”动作。是否正在尝试找到连接所有节点的最短路径?在这种情况下,看/谷歌的“旅行推销员问题”。

答案 2 :(得分:0)

Here是A *的内存高效,经过良好测试的开源实际实现,也可以在Android上使用。距离计算可以很容易地替换(默认的是快速的半实施)