首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

A*寻路中的启发函数是咋回事

2012-04-19 
A*寻路中的启发函数是怎么回事?看不懂这个启发函数,麻烦哪位能给详细地说一下intGetNextAct()//找到下一个

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]中的值确定返回值

热点排行