游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1463|回复: 2

有谁懂A* 算法啊 小弟有个问题

[复制链接]

1

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2007-1-22 15:07:00 | 显示全部楼层 |阅读模式
这是我搜到的A*算法的一个描述:
Best_First_Search()
{
 Open = [起始节点];
 Closed = [];
 while (Open表非空)
 {
  从Open中取得一个节点X,并从OPEN表中删除。
  if (X是目标节点)
  {
   求得路径PATH;
   返回路径PATH;
  }
  for (每一个X的子节点Y)
  {
   if (Y不在OPEN表和CLOSE表中)
   {
    求Y的估价值;
    并将Y插入OPEN表中;
   }
   //还没有排序
   else if (Y在OPEN表中)
   {
    if (Y的估价值小于OPEN表的估价值)
     更新OPEN表中的估价值;
   }
   else //Y在CLOSE表中
   {
    if (Y的估价值小于CLOSE表的估价值)
    {
     更新CLOSE表中的估价值;
     从CLOSE表中移出节点,并放入OPEN表中;
    }
   }
   将X节点插入CLOSE表中;
   按照估价值将OPEN表中的节点排序;
  }//end for
 }//end while
}//end func

 if (Y的估价值小于CLOSE表的估价值) 的情况好象不回出现啊  
因为Y作为一个父亲节点 这样不是走回头路吗 不可能找到比他小的估价值

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-1-25 13:06:00 | 显示全部楼层

Re:有谁懂A* 算法啊 小弟有个问题

a*已经是很久的东西了
LZ自己上gameres上多看看相关文章
然后网上开源的code也有一堆
自己再写个sample跟踪一下就明白了

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2007-1-28 19:17:00 | 显示全部楼层

Re:有谁懂A* 算法啊 小弟有个问题

我的理解是这样的:
Close表代表已经走过的节点,
Open表代表将要走的节点。
Y在Close表中,代表已经经过一次Y节点了。
这次又从另外的路途中来到了Y节点。
所谓Y节点的估价值代表 从起点到Y的距离+Y点到终点的估价,
因为采用固定的估价函数,所以Y点到终点的估价是一个固定的值。
但是因为两次来到Y点的路径不同,所以从起点到Y的距离不同。

这样就意味着: if (Y的估价值小于CLOSE表的估价值),代表这次来到Y点更近一点,那我们就放弃之前来到Y点的路程(之前一定绕远了)。

你的“因为Y作为一个父亲节点 这样不是走回头路吗 不可能找到比他小的估价值”我不是很了解。Y节点是谁的父节点?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 08:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表