echosphor吧 关注:1贴子:120
  • 1回复贴,共1

【游戏算法】A*寻路

取消只看楼主收藏回复

1L


IP属地:浙江1楼2011-06-13 11:23回复
    主要搜索过程伪代码如下:
    创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
    算起点的估价值;
    将起点放入OPEN表;
    while(OPEN!=NULL)
    {
    从OPEN表中取估价值f最小的节点n;
    if(n节点==目标节点)
    {    break;    }
    for(当前节点n 的每个子节点X)
    {   算X的估价值;
    if(X in OPEN)
    {
    if( X的估价值小于OPEN表的估价值 )
    {
    把n设置为X的父亲;
    更新OPEN表中的估价值; //取最小路径的估价值
    }
    }
    if(X inCLOSE)
    {
    if( X的估价值小于CLOSE表的估价值 )
    {
    把n设置为X的父亲;
    更新CLOSE表中的估价值;
    把X节点放入OPEN //取最小路径的估价值
    }
    }
    if(X not inboth)
    {
    把n设置为X的父亲;
    求X的估价值;
    并将X插入OPEN表中; //还没有排序
    }
    }//end for
    将n节点插入CLOSE表中;
    按照估价值将OPEN表中的节点排序; //实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。  }//end while(OPEN!=NULL)
    保存路径,即 从终点开始,每个节点沿着父节点移动直至起点,这就是你的路径;


    IP属地:浙江3楼2011-06-13 11:26
    回复