积木

No sub title

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

看完以下概述,即可明白何为A星算法。

关于什么是A星算法,上网一查便知。在此只简要记录一些有关A星算法的要点
一:f、g、h值
f值:即:算法的估价值。是指对某一点的估价值。例如:要想从起点 S 到达终点 D,则中间可能会经过n个点,假如其中经过点:X ,则f(X),就是对点x的计算所得的估价值。当然,对于估价值,是越小越好。
g值: 即:从起点 S 到达点 X 实际所花的代价值。例如:以格子数为计量单位。则g值表示,从S到X所经过的格子数,即为实际所花费的代价值
h值: 即:从点 X 到达终点 D 可能要花费的值。也就是所谓的估计值,猜测值。这个值根据不同的应用,实现策略,将会有不同的结果。当然值越小是越好的。理由是:f(X) = g(X) + h(X) 。因为g(X)值是固定的,已知的。所以要想f(X)值越小,则只能h(X)的值越小。

二:节点与地图位置点
地图位置点不言而喻,是指地图上的某个具体点,因此,只要地图的划分方法确定,则地图位置点必然确定。
节点是A星算法中所需要依赖的数据信息存储相关的点。与地图位置点不同。节点中所存储的数据信息是灵活多变的。同时,同一个节点,可能对应于不同的地图位置点。一般情况下,节点中会存储地图位置点信息、当前节点的f、g、h值等等。
!!!note: 在A星算法中,节点只分为两类。一类是:待考察的节点。一类是:已考察的节点。
已考察节点是指:当所有与节点X相关连的节点的f、g、h值均已被赋值并且这些节点均已被添加到open表中时,则节点X就是已经被考察过了。

三:open表与closed表
open表中所存储的元素,全部都是需要进一步进行考察的节点。
closed表中所存储的元素,全部都是已经被考察过了的节点。

四:A星算法的实现步骤
    1) 令 P = 起始节点
    2) 把 f, g, h 值赋给 P
    3) 将 P 添加到 Open 表中。此时 P 是 Open 表中唯一的节点。
    4) 令 B = Open 表中的最佳节点。(提示:所谓最佳节点是指:该节点的 f 值最小)
        (1) 如果 B 是目标节点,则退出。此时已找到一条路径。
        (2) 如果 Open 表为空,则退出。此时没有找到路径。
    5) 令 C 等于一个与 B 相连的有效节点。
        (1) 把 f, g, h 的值赋给 C。
        (2) 检查 C 是在 Open 表里,还是在Closed表里。
            2.1: 若在 Closed 表里,则检查新路径是否比原先更好,若是则采用新路径。
            2.2: 否则把 C 添加到 Open 表里.
        (3) 对所有 B 的子孙节点重复步骤 5).
    6) 重复步骤 4).
posted on 2013-06-23 12:37 Jacc.Kim 阅读(1270) 评论(0)  编辑 收藏 引用 所属分类: 算法

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理