A*算法学习笔记-(八方向,非最优解)

大体思路明白一动手就不行了先贴代码 等明白了在我那分析吧

现在又有点乱了,因为A*不止一种思路,慢慢来吧

--------------------------------------------

思路明白了,Demo图如下,暂未添加最优解选择策略。

 

A星算法演示图

 

@ 由于运算量小,时间经常近似为0,所以加大棋盘为40*40;

@ 当时刷新的时候用的是repaint(),方法,但是画面有明显的闪烁,打算用J2ME里常用的双缓冲实现,

昨晚看了书想到了 repaint(ab,c,d)这个方法,试了试效果不错,无闪烁。

@ 关于线程的挂起、停止、继续,还未添加,或者说添加了为调试通过。待扩展。

 

=>相关源码 及演示程序下载<=

 

下是A*主要算法和实现步骤:

一 主要公式:f(n)=g(n)+h(n)

f(n) 是节点n从初始点到目标点的估价函数

g(n) 是在状态空间中从初始节点到n节点的实际代价

h(n) 是从n到目标节点最佳路径的估计代价。

二 主要步骤

创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。

遍历当前节点的各个节点,将n节点放入CLOSE中,取n节点的子节点X,->算X的估价值->

  While(OPEN!=NULL)

  {

  从OPEN表中取估价值f最小的节点n;

  if(n节点==目标节点) break;

  else

  {

  if(X in OPEN) 比较两个X的估价值f //注意是同一个节点的两个不同路径的估价值

  if( X的估价值小于OPEN表的估价值 )

  更新OPEN表中的估价值; //取最小路径的估价值

  if(X in CLOSE) 比较两个X的估价值 //注意是同一个节点的两个不同路径的估价值

  if( X的估价值小于CLOSE表的估价值 )

  更新CLOSE表中的估价值; 把X节点放入OPEN //取最小路径的估价值

  if(X not in both)

  求X的估价值;

  并将X插入OPEN表中; //还没有排序

  }

  将n节点插入CLOSE表中;

  按照估价值将OPEN表中的节点排序; //实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。

 

代码如下:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值