网站大量收购独家精品文档,联系QQ:2885784924

对角启发函数.pdf

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

对角启发函数

privatefunctiondiagonal(node:Node):Number

{

vardx:Number=Math.abs(node.x-_endNode.x);

vardy:Number=Math.abs(node.y-_endNode.y);

vardiag:Number=Math.min(dx,dy);

varstraight:Number=dx+dy;

return_diagCost*diag+_straightCost*(straight–2*diag);

}

对角启发函数解释:对角启发函数计算出从起始

节点到终止节点x轴,y轴变化数的绝对值dx,

dy。Diag为dx,dy中的小值,为了使选择的路径

最短必须走diag次数个对角,剩下的|dx-dy|次

全都水平或者竖直移动。那么,该节点的f值就

当前节点

是diag乘以2加上|dx-dy|*1。

A*算法解释:首先检查起始节点周围节点的f值,

如果该节点属于已查列表或者待查列表,那么如

果计算出的f值比该节点原有的f属性值小,则

将该值用新计算出来的f值替代。这样做是为了防止从当前节点移至下一个节点并重新计算其周围节点的f值时,

出现已查列表中的某个节点原有f属性比新计算出来的大。这时,我们就需要重新修正该节点的f值,以保证准

确。虽然,我现在还不知道不这样做会出现什么错误,但这样做至少保证每一步都是没有差错的,绝对正确的。

所以建议你每次都检查,并修正已查列表中被重新计算f值的节点的f值。

倘若该节点不在已查列表或者待查列表之中那么给该节点的f值赋值,并将该节点添加到待查列表中,并将当前

节点添加到已查列表。等将周围的节点全部计算完后,取已查列表中f值最小的节点作为下一个初始节点,并将

当前节点添加到路径数组中。接着重复执行上面的操作直到到达终止节点停止。但是

有一种情况被忽略了,如下图所示,初始节点找到f值最小的节点1并将其设置为当

前节点,1节点找到f值最小的2节点并将其设置为当前节点,到3节点时因为前面

黑色区域不能穿过,又返回到2节点,2节点有找到3节点,如此循环。这是改程序

的一个漏洞,有待改进。

文档评论(0)

火龙果的春天 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档