寻路算法实例代码和概念最优分析,适合游戏地图编程

2012年1月17日 发表评论 阅读评论

记得很早以前就写过A*算法,现在把概念写出来供参考

寻路一般主要有深度优先和广度优先及启发式探索算法。
a. 深度优先:
一般是深度优先是按照一定的顺序前查找完一个分支,再查找另一个分支,
  直到找到目标或到达步数为止。
b.广度优先
    一般是找周围所有点记录下来,然后在对每个点找它们周围所有未找过的点,然后再
  如此循环下去直到找到目标为止。

c. 启发式
     启发式搜索一般是对每个搜索位置进行评估,找到最好的位置,再从这个位置
  如此循环进行搜索直到目标。
  启发中的估价是用估价函数表示的:
  f(n) = g(n) + h(n)
  其中f(n) 是节点n的估价函数,g(n)是从初始点到n结点的实际代价,
  h(n)是从n结点到目标点最佳路径的估价。
  如果公式中的h(n)总是=0, 也即不进行估价,那么就是广度优先,

  现在的A*算法一般都使用了启发式函数,对于普通的A*算法通常使用当前结点到目标结点
  的距离来计算h。

  关于启发式要考虑的启发因素还有类似于一些地形属性如泥士地走慢点等也可考虑在内。 

晕死,  后来发现原来我早之前已经写过这个文章

内容如下:

寻路备忘录

寻路备忘录

一.深度优先搜索(DFS)
    按照一定顺序(如左上右下)能走则走(这就是深度两字的来源),
    就象一个瞎子走迷宫一样:
1.选定一个方向一直走
2.碰壁后退一步,再重复1的步骤.
缺点:
          a.在很少障碍的空地图上若跨出的第一步顺序不对时寻路挺费时;
          b.找到的不一定是最短路径
优点:
          算法所用内存较少.

二.广度优先搜索(BFS)
        1.先在开始位置测试周围一格所能走的路,并记录周围的通路格子;
2.然后依次选择周围的通路格子位置重复1步骤.
    这就象一个水波扩散一样,这就是广度两字的来源.
缺点:
        寻路所用内存较大
    优点:
        能保证找到最短路径

三.启发式搜索:
A*就是常用的一种启发式算法.作法如下:
1.选路,这会用到一个叫估价函数的东东F(X),其中F(X)=G(X)+H(X);
        式中的G(X)一般是已经搜索的步数,而H(X)则是一个从当前节点到目标节点估计函数,

        一般可用  当前节点到目标节点的距离来作比较.
        2.走路,碰到不通路时,在所有所记录的通路中重新选择一条路来走,即重复1.
       优点:
        速度快并且所占内存不多


转载请注明来自:[MSN Spaces]http://msn.shandian.biz/10.html

  1. 本文目前尚无任何评论.