游戏开发中最常见的A*搜图。俗称A*算发。有源代码的发上来,连接也行。谢谢各位了。

解决方案 »

  1.   

    你来CSDN是为了赚钱吗?现在有人需要帮助。我很想研究明白这个算法。
      

  2.   

    最好优先搜索法 A*
    -------------------------------------------
    f(n) 是节点n的估价函数
    g(n) 是在状态空间中从初始节点到n节点的实际代价
    h(n) 是从n到目标节点最佳路径的估计代价
    如果h(n) >> g(n)时,可以省略g(n)
    f'(n)是估价函数
    g'(n)是起点到终点的最短路径值
    h'(n)是n到目标的最短路径的启发值f'(n)其实是无法预先知道的,所以我们用前面的估价函数f(n)做近似
    g(n)代替g'(n),但 g(n)>=g'(n) 才可
    h(n)代替h'(n),但h(n)<=h'(n)才可
    ----------------------------------------
    A*算法的核心是估价函数f(n),它包括g(n)和h(n)两部分g(n)是已经走过的代价
    g(n)表示在状态空间从起始节点到n节点的深度h(n)是n到目标的估计代价
    h(n)表示n节点所在地图的位置到目标位置的直线距离
    ----------------------------------------------------------
    从出发点(A)到目的地(B)的最短距离是固定的,我们可以写一个函数 judge() 估计 A 到 B 的最短距离, 如果程序已经尝试着从出发点(A) 沿着某条路线移动到了 C 点, 那么我们认为这个方案的 A B 间的估计距离为 A 到 C 实际已经行走了的距离 H 加上用 judge() 估计出的 C 到 B 的距离. 如此, 无论我们的程序搜索展开到哪一步, 都会算出一个评估值, 每一次决策后, 将评估值和等待处理的方案一起排序, 然后挑出待处理的各个方案中最有可能是最短路线的一部分的方案展开到下一步, 一直循环到对象移动到目的地, 或所有方案都尝试过却没有找到一条通向目的地的路径则结束. (通常在游戏里还要设置超时控制的代码,当内存消耗过大或用时过久就退出搜索)    怎么写这个算法中的估价函数非常的重要,如何保证一定能找到最短路径呢? 充要条件是, 你的估价函数算出的两点间的距离必须小于等于实际距离. 这个可以从数学上严格证明,有兴趣可以自己去查阅相关资料. 如果你的估价函数不满足这点, 就只能叫做 A 算法, 并不能保证最后的结果是最优的,但它可能速度非常的快. 而游戏中我们也不一定非要得到最优解的. 但无疑, 满足那个条件的 A* 算法中, 估计值越接近真实值的估价函数就做的越好, 下面给出的程序,我只使用了一个相当简单的估价函数: 求出两点中,若无障碍物的情况下的最短路径