上篇文章中证明了A Star算法,下面,我们来看看该算法中需要注意的几个问题。
1,在扩展节点M时,计算了其后继节点N的F值,发现N节点已经在open链表中,并且新的F值小于老的F值,但是此时不进行F值的更新,那么修改过的算法正确吗?很简单不正确的,看下面这个图
图1
各个边的权值都已经标注在各边的旁边。H(A)=-100,H(B)=20,H(C)=30。经过start的扩展,F(A)=0,F(C)=40。因此,继续扩展点A,计算得到F(B)=140,把点B放进open链表中。然后扩展点C,计算得到的新的B的F值是40,如果此时不更新,然后扩展点B,最后得到的路径是start-A-B-end,显然是错误的。
2,在扩展节点M时,计算了其后继节点N的F值,发现N节点已经在close链表中,并且新的F值小于老的F值,但是此时不进行更新,那么修改过的算法正确吗?很简单,也是不正确的,看下面这个图:
图2