A*寻路算法伪代码
Posted zsl6658
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
以上是关于A*寻路算法伪代码的主要内容,如果未能解决你的问题,请参考以下文章