A*寻路中的启发函数是怎么回事?
看不懂这个启发函数,麻烦哪位能给详细地说一下
int GetNextAct( ) //找到下一个移动方向。
{
int dis[4]; //按四个方向移动后离目标距离
int order[4]; //四个方向搜索次序
int t=32767;
int tt=2;
for (int i=0;i <4;i++)
dis[i]=abs(x+dx[i]-TargetX)+abs(y+dy[i]-TargetY);
for (i=0;i <4;i++)
if (dis[i] <t)
{
order[0]=i+1;
t=dis[i];
}
if (Act[Level]==0)
return order[0];
order[1]=-1;
for (i=0;i <4;i++)
if ((dis[i]==t)&&(i!=(order[0]-1)))
{
order[1]=i+1;
break;
}
if (order[1]!=-1)
{
for (i=0;i <4;i++)
if (dis[i]!=t)
{
order[tt]=i+1;
tt++;
}
}
else
{
for (i=0;i <4;i++)
if (dis[i]!=t)
{
order[tt-1]=i+1;
tt++;
}
}
if (Act[Level]==order[0])
return order[1];
if (Act[Level]==order[1])
return order[2];
if (Act[Level]==order[2])
return order[3];
if (Act[Level]==order[3])
return 5;
}
[解决办法]
计算四个方向到目标的距离,记录在数组dis中
然后按距离大小排序,将dis的 索引 记录在数组order中
根据Act[Level]中的值确定返回值