此文章目标人群为还未理解A*算法的或想更进一步了解它的人士。
术语定义。较枯燥,乃常规概念,可略过。
给定一个有向图,如果图中两个结点A、B存在边,则称结点A可达结点B。
如果图中任意一个结点A通过数个中间结点可达另外一个结点B,那么称A、B存在一条路径,定义该路径的长度为该路径经过的那些边的权值之和。
可以看出来,两个结点之间可能有不止一条路径,也可能没有路径。
给定有向图的两个结点求他们之间长度最短的路径,可以用到A*算法,算法在下面列出。
对图中某一结点N以及起始结点src、终止结点dst:
整个算法在执行过程中,会从src结点开始对图中的结点进行遍历(可能某些并不会被遍历到),算法在遍历到某个结点时,会记录下src到该结点经过的路径,该路径的长度就记为g(N)。在算法初始化时,很自然的,src结点的g值为0,其它的结点g值为∞,表示还未被遍历到。另外,某个结点可能被遍历多次,例如:
A
↗ ↘
src D → ….
↘ ↗
B
算法(可能)通过src->A->