CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

谁能介绍一下游戏编程中著名的A算法

楼主ghj1976(蝈蝈俊.net)2000-06-26 21:15:00 在 专题开发/技术/项目 / 数据结构与算法 提问

        小弟现在正在利用空余时间学习游戏编程,那位大虾可以介绍一下游戏编程中著名的A算法,即游戏中人物行走路线的算法。  
  问题点数:50、回复次数:5Top

1 楼Arsoka(冰火)回复于 2000-06-30 19:53:00 得分 5

好象电脑爱好者杂志有介绍吧?8-)Top

2 楼ghj1976(蝈蝈俊.net)回复于 2000-07-02 15:58:00 得分 0

那一期????我没看过.Top

3 楼Xiao(谢晓)回复于 2000-07-04 11:03:00 得分 10

A算法就是通过一个估价函数判断当前结点与目标结点间的距离,越近的越先扩展。Top

4 楼wedong2000(wedong)回复于 2000-07-07 23:21:00 得分 35

 
  二、A*算法的程序编写原理    
   
  我在《初识A*算法》中说过,A*算法是最好优先算法的一种。只是有一些约束条件而已。   我们先来看看最好优先算法是如何编写的吧。    
   
  如图有如下的状态空间:(起始位置是A,目标位置是P,字母后的数字表示节点的估价值)    
   
     
   
  搜索过程中设置两个表:OPEN和CLOSED。OPEN表保存了所有已生成而未考察的节点,CLOSED   表中记录已访问过的节点。算法中有一步是  
   
  根据估价函数重排OPEN表。这样循环中的每一   步只考虑OPEN表中状态最好的节点。具体搜索过程如下:    
   
   
  1)初始状态:  
  OPEN=[A5];CLOSED=[];  
  2)估算A5,取得搜有子节点,并放入OPEN表中;  
  OPEN=[B4,C4,D6];CLOSED=[A5]  
  3)估算B4,取得搜有子节点,并放入OPEN表中;  
  OPEN=[C4,E5,F5,D6];CLOSED=[B4,A5]  
  4)估算C4;取得搜有子节点,并放入OPEN表中;  
  OPEN=[H3,G4,E5,F5,D6];CLOSED=[C4,B4,A5]  
  5)估算H3,取得搜有子节点,并放入OPEN表中;  
  OPEN=[O2,P3,G4,E5,F5,D6];CLOSED=H3C4,B4,A5]  
  6)估算O2,取得搜有子节点,并放入OPEN表中;  
  OPEN=[P3,G4,E5,F5,D6];CLOSED=[O2,H3,C4,B4,A5]  
  7)估算P3,已得到解;  
   
  看了具体的过程,再看看伪程序吧。算法的伪程序如下:    
   
   
  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  
   
  啊!伪程序出来了,写一个源程序应该不是问题了,依葫芦画瓢就可以。A*算法的程序与此   是一样的,只要注意估价函数中的g(n)的h(n)约束条件就可以了。不清楚的可以看看《初识A*算法》。好了,我们可以进入另一个重要的话题,用A*算法实现最短路径的搜索。在此之   前你最好认真的理解前面的算法。  
  Top

5 楼wedong2000(wedong)回复于 2000-07-07 23:22:00 得分 0

转贴的。Top

相关问题

  • 谁能介绍几本游戏编程方面的书,最好是算法
  • 求画直线的算法(Windows游戏编程大师技巧(第二版))
  • 关于vc++游戏编程方面的书,介绍几本
  • 有什么好站点介绍游戏编程的吗?
  • 那位朋友介绍一点 VB 游戏编程的资料啊!
  • 游戏编程的问题
  • 高难度“数字游戏”编程
  • 关于游戏编程看哪些书?
  • 游戏编程用什么软件?
  • 推荐一本游戏编程书籍

关键词

  • 算法
  • 节点
  • 游戏编程
  • 价值
  • 函数
  • 表
  • d6
  • o2
  • 估算
  • 估价值

得分解答快速导航

  • 帖主:ghj1976
  • Arsoka
  • Xiao
  • wedong2000

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo