A*算法概述:F=G+H
初始化根节点的G、H、F;
根节点加入open表;
while(open表不为空)
{
从open表中取出估价函数最小的节点作为当前节点P;//注意是取出,这里open表中元素数减一
if(P为目标节点)
返回P;
P加入close表中;
for(P的每个孩子节点child)
{
判断child是否在close表中;
if(在close中)
continue;
else
{
计算child的G代价;//即已产生的实际代价
判断child是否在open表中;
if(在open表中)
{
if(child的G代价<在open表中的代价)//即新路径更优
{
设置open表中的该child的父节点为P;
更新open表中的该child的估价函数G,H,F;
}
}else
{
设置child的父节点为P;
计算child的估价函数G,H,F;
child加入open表中;
}
}
}
return false;
}
打印路径的方式是沿着父节点一步步往前回溯;