A*算法计算步骤总结

A*算法计算步骤总结
1,从点A开始,并且把它作为待处理点存入一个“开启列表”。尽管现在列表里只有一个元素,但以后就会多起来。你的路径可能会通过它包含的方格,也可能不会,这是一个待检查方格的列表。
A*算法计算步骤总结_第1张图片
2,寻找A点周围所有可到达或者可通过的方格,跳过有墙,水,或其他无法通过地形的方格。也把他们加入开启列表。保存点A作为所有这些方格的“父方格”。
A*算法计算步骤总结_第2张图片
3,从开启列表中删除点A,把它加入到一个“关闭列表”,列表中保存所有不需要再次检查的方格。
4,按照公式F=G+H计算A点所有周围点的F值,从开启列表中选择F值最低的方格,记为#1方格。把它从开启列表中删除,然后添加到关闭列表中。
A*算法计算步骤总结_第3张图片
A*算法计算步骤总结_第4张图片
5,检查#1方格所有相邻方格。跳过那些已经在关闭列表中的或者不可通过的(有墙,水的地形,或者其他无法通过的地形)。
6,如果有相邻方格还不在开启列表中,把他们添加进开启列表。把选中的#1方格作为新的方格的父节点。
如果某个相邻方格已经在开启列表里了,检查现在的这条路径是否更好。换句话说,检查如果我们用新的路径(A->#1->该相邻格)到达它的话,G值是否会更低一些(即,比“A->该相邻格”原来路径的G值是否更低)。如果不是,那就继续检查其他已经在开启列表里的相邻格子;如果有方格的G值更低,该方格就作为#1方格的下一个方格,同时把该相邻方格的父节点改为目前选中的#1方格,重新计算该方格周围相邻方格的F和G的值。如果所有方格的G值都不是更低,那就放弃所有的已经在开启列表里的相邻格子作为#1方格的下一步方格;
如果#1方格的相邻方格都已经在开启列表中,并且经检查G值都不低,那么放弃#1作为A的下一个方格。然后按照F值最低原则选择开启列表里其他方格作为A点的下一个方格。
如果#1方格有新放进开启列表的方格,则检查新添加进开启列表的所有相邻方格,选其中F值最低的方格作为#1方格的下一个方格。如下图所示,当新加入开启列表的方格和原来在开启列表的方格都有时,如何处理?
A*算法计算步骤总结_第5张图片
7,我们重复这个过程,直到目标格被添加进关闭列表。
A*算法计算步骤总结_第6张图片
8、从红色的目标格开始,按箭头的方向朝父节点移动。这最终会引导你回到起始格,这就是你的路径!
A*算法计算步骤总结_第7张图片

你可能感兴趣的:(人工智能)