A*寻路算法伪代码

                                                               A*寻路算法伪代码

     这是今天读了GameDev上的一篇关于A*算法的文章自己总结的一段伪代码,基本上描述清楚了A*算法的大致思路.

heap.add(firstnode)      //将开始节点加入堆,同时也是加入openlist
do
{
 fleast=heap.pop();            //从openlist取fcost最小的元素
 current=fleast;                   //取出的元素作为当前节点
 fleast.flag=1 //1:on close 0:not on open nor on close
 for(int i=current.x-1;i<current.x+1;i++)     //考察当前节点的所有相邻节点
 for(int j=current.y-1;j<current.y+1;j++)
 {
  if(map[i][j]!=unwalkable||!onclose(node(i,j)))         //相邻节点可通并且没有考察过
  {
  if(!onopen(node(i,j)))                                    //相邻节点不在openlist中
  {
  heap.add(node(i,j));                                    //加入openlist
  node(i,j).parent=current;                            //设置相邻节点的父节点为当前节点
  node(i,j).calculate(f,g,h);                           //重新计算fcost,gcost,hcost
  
  if(node(i,j)==dest)                                     //如果加入的节点是目标点则找到路径
  path=find;
  }
  else
  {
  temp.gcost=parent.gcost+addcost;         //相邻节点已经在openlist中
  node(i,j).hcost=10*(abs(i-parent.x)+abs(j-parent.y));
  node(i,j).fcost=node(i,j).gcost+node(i,j).hcost;
  if(tempgcost<node(i,j).gcost)
  node(i,j).parent=current;
  node(i,j).recaculate(f,g,h);                             //重新计算fcost,gcost,hcost
  
 }
 }
 
}while(!hp.isempty())                                  //如果堆空则没有找到路径
if(path==find)
outpath;                                                      //输出路径
else
cout<<"path not find;!"<<endl;

你可能感兴趣的:(算法,Path)