Lee的算法:http :
//en.wikipedia.org/wiki/Lee_algorithm
本质上是BF搜索,下面是一个示例:http : //www.oop.rwth-aachen.de/documents/oop-2007/sss-
oop-2007.pdf
例如,如果您有一个网格,其中* =障碍物,则可以向上,向下,向左和向右移动,并且从S开始并且必须转到D,并且0 =自由位置:
S 0 0 0* * 0 ** 0 0 *0 0 * ** 0 0 D
您将S放入队列,然后“扩展”它:
S 1 0 0* * 0 ** 0 0 *0 0 * ** 0 0 D
然后扩展其所有邻居:
S 1 2 0* * 0 ** 0 0 *0 0 * ** 0 0 D
和所有这些邻居的邻居:
S 1 2 3* * 3 ** 0 0 *0 0 * ** 0 0 D
依此类推,最终您将获得:
S 1 2 3* * 3 ** 5 4 *7 6 * ** 7 8 9
因此,从S到D的距离为9。运行时间为O(NM),其中N =行数,M
=列数。我认为这是在网格上实现的最简单算法,并且在实践中也非常有效。它应该比经典的dijkstra更快,尽管如果使用堆实现dijkstra可能会获胜。



