您的位置: 首页 > 技术文档 > 多媒体制作 > A*寻路,二叉堆优化及AS3实现
浅谈flash web的结构 回到列表 Apollo是危险的吗?
 A*寻路,二叉堆优化及AS3实现

作者:eidiot 时间: 2007-04-23 文档类型:原创 来自:蓝色理想

第 1 页 A*寻路,二叉堆优化及AS3实现
第 2 页 牛刀小试 - A*寻路算法简介
第 3 页 如虎添翼 - 使用二叉堆优化
第 4 页 锋芒毕露 - AS3代码和示例

eidiot挂帅出征,携令牌一枚,率人马若干,编制如下:

* 寻路元帅  
寻路总指挥,执“行动令牌”一枚和“开启士兵名录”、“关闭将军名录”各一册。凭“行动令牌”调兵遣将。
* 预备士兵  
由元帅或预备将军派往未探索区域,完成探索任务后授“开启”军衔,晋为“开启士兵”。发令派其出者为其“父将”。
* 开启士兵
前线待命。接到“行动令牌”后晋为“预备将军”执行探索任务。
* 预备将军
凭“行动令牌”派出预备士兵至周围未探索区域,并考察周围“开启士兵”状态,以“父将”之名节制所派士兵。归还“行动令牌”后授“关闭”军衔,晋为“关闭将军”。
* 关闭将军
后方待命。到达终点后依次报告“父将”直至元帅,寻路任务完成。

为协调行动,特颁军令如下:

* “预备士兵”只能由起点或“父将”所在格横、竖或斜向移动一格,直向(横、竖)移动一格走10步,斜向一格14步(斜向是直向1.414倍,取整数),抵达后不得再移动。
* 所有人员需记下派出自己的“父将”、从起点到所在位置所走步数(G)、预计到达终点共需步数(F)。其中 F = G + H ,F 是从起点经过该点到终点的总路程,G 为起点到该点的“已走路程”,H 为该点到终点的“预计路程”。G 的计算是“父将”的 G 值加上“父将”位置到该位置所走步数,H 的计算是该点到终点“只走直路”所需路程。

看看战图更容易理解,从红色方格出发越过黄色障碍到达蓝色方格:

图例:

由图可形象看出何谓“开启士兵”、“关闭将军”:外围的绿色方格为“开启士兵”,“前线待命”,随时可向外继续探索。内围的紫色方格是“关闭将军”,从终点开始沿箭头寻其“父将”直至起点即得最终路径。

战前会议结束,拔营出征。

* 首先派出编号为0的“预备士兵”侦查起点,然后升其为“开启士兵”,列入“开启士兵名录”。
* 检查“开启士兵名录”,找出F值最低的“开启士兵”(只有一名人员,当然是0号),发出“行动令牌”派其执行探索任务。
* 0号“开启士兵”接到“行动令牌”,晋为“预备将军”,探索周围格子。
* 向周围8个格子分别派出编号为1到8的“预备士兵”,成为这八名“预备士兵”的“父将”。
* 八名“预备士兵”到达方格后计算G值和F值,报告0号“父将”,晋为“开启士兵”。
* 0号“预备将军”收到八名“开启士兵”的报告,归还“行动令牌”,晋为“关闭将军”。
* 元帅收回“行动令牌”,将0号加入“关闭将军名录”,1到8号加入“开启士兵名录”。

此过程结果如下(方格右上角数字是人员编号,左下角是G,右下角是H,左上角是F):

第一轮探索任务完成,元帅开始检查“开启士兵名录”。此时名录中有8名人员,其中1号F值最低为40(起点右移一格,G值为10,到终点平移3格,H值为30,F = G + H = 40),向其发出“行动令牌”。

* 1号“开启士兵”接到“行动令牌”,晋为“预备将军”,探索周围格子。
* 周围8个格子中有3格障碍,跳过。一格是“关闭将军”,跳过。其余四格是“开启士兵”,检查如果从该位置过去G值是否更低。以2号为例,如果从1 号过去G值为 10 + 14 = 24 (1号的G值加上1号到2号的步数),而2号原来的G值是10,不做处理(如果此时发现新的G值更低,则更新2号的G值,并改2号的“父将”为1号)。其他类推。
* 1号检测完周围的方格,不需做任何处理,归还“行动令牌”,晋为“关闭将军”。
* 元帅收回“行动令牌”,将1号加入“关闭将军名录”。

此过程结果如下:

第二轮结束,元帅再次检查“开启士兵名录”。此时还有7名“开启士兵”,5号和8号的F值都为最低的54,选择不同寻路的结果也将不同。元帅选择了最后加入的8号“开启士兵”发出“行动令牌”,过程同上,不赘述,结果如下:

重复这个过程直到某位“关闭将军”站到了终点上(或者“开启士兵”探测到了终点,这样更快捷,但某些情况找到的路径不够短),亦即找到了路径;或是“开启士兵名录”已空,无法到达终点。

下面整理一下全过程并翻译成“标准语言”,首先是各名词:
* “开启士兵名录” - 开启列表 - open list
* “关闭将军名录” - 关闭列表 - closed list
* “父将” - 父节点 - parent square
* F - 路径评分
* G - 起点到该点移动损耗
* H - 该点到终点(启发式)预计移动损耗

寻路过程:
* 1, 将起点放入开启列表
* 2, 寻找开放列表中F值最低的节点作为当前节点
* 3, 将当前节节点切换到关闭列表
* 4, 如果当前节点是终点则路径被找到,寻路结束
* 5, 对于其周围8个节点:
 o 如果不可通过或已在关闭列表,跳过,否则:
 o 如果已在开放列表中,检查新路径是否更好。如果新G值更低则更新其G值并改当前节点为其父节点,否则跳过
  o 如果是可通过区域则放入开启列表,计算这一点的F、G、H值,并记当前节点为其父节点
* 6, 如果开启列表空了,则无法到达目标,路径不存在。否则回到2

再翻译成“编程语言”?请看第三部分,锋芒毕露 - AS3代码和示例。

经典论坛讨论:
http://bbs.blueidea.com/thread-2738527-1-1.html

出处:蓝色理想
责任编辑:elesa

上一页 A*寻路,二叉堆优化及AS3实现 下一页 如虎添翼 - 使用二叉堆优化

◎进入论坛Flash专栏版块参加讨论

相关文章 更多相关链接
浅谈flash web的结构
雅致Flash打包工具1.0
用Flash制作的站长工具箱
Apollo是危险的吗?
Apollo 开发技巧
作者文章
Conjee_Album 1.0 发布
AS3学习笔记
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
悟道web标准:前端性能优化
纯中文域名".中国"今日提交申请
世界之窗3.0皮肤设计大赛结果公布
使用jQuery制作滑动动画效果的层
如何设计网页横幅
Plump 图标设计
Subrat Nayak图标设计
百度知道推出文档分享服务
CSS Sprites(CSS雪碧):要还是不要?
UIRSS三周年纪念日推出V2公测版
栏目最新 栏目最新列表
Firefox的Jetpack扩展案例分析
阿里妈妈UED谈CSS Sprites技术
Photoshop中设计绿色时尚Web网站
操作Dom节点实现间歇滚动新闻
浏览器15年历史回顾
如何创建Firefox的Jetpack扩展
全透视:CSS Z-index 属性
用PS 3D工具绘制甜麦圈包装袋
悟道Web标准:让W3C标准兼容终端
悟道WEB标准:统一思想,遵循标准
>> 分页 首页 前页 后页 尾页 页次:2/41个记录/页 转到 页 共4个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

本文现有 2 条评论 评分:- llllllllllllllllllll + 评分人数: 2 ,平均分: 4.50


yilianxin Publish at 2007-10-11 14:48:19 评分5
不错
onechenxing Publish at 2007-5-28 10:31:29 评分4
good
您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
《Web标准设计》
闪魂-FlashCS4完美入门与案例精粹
Waver_h's华丽世界
Illustrator CS3质感绘画表现技法
《Flash短片轻松学》
《用户体验要素》
《JavaScript语言精粹》
作品集 更多内容

PushMail邮件 Seasons store 公寓类地产站 一条鱼 还未细化的飞机稿 瑞士朵佳浓首页 Wizard 贝克洛门窗