A*寻路算法

A*算法是一种启发式寻路方法,利用F=G+H公式评估节点优先级。在6*6的格子地图中,从起点到终点,避开黑色障碍,通过openlist和closelist管理节点状态,不断更新F值找到最佳路径。当open列表为空或包含目标节点时,搜索结束。算法包括将节点加入open列表,比较F值并更新,以及将到达节点移至close列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A*寻路算法就是启发式探索的一个典型实践,在寻路的过程中,给每个节点绑定了一个估计值(即启发式),在对节点的遍历过程中是采取估计值优先原则,估计值更优的节点会被优先遍历。

如下图区域,被简化成6*6的小方格。其中绿色表示起点,红色表示终点,黑色表示路障,不能通行。

简化地图

先描述A*算法的大致过程:

  1. 将初始节点放入到open列表中。
  2. 判断open列表。如果为空,则搜索失败。如果open列表中存在目标节点,则搜索成功。
  3. 从open列表中取出F值最小的节点作为当前节点,并将其加入到close列表中。
  4. 计算当前节点的相邻的所有可到达节点,生成一组子节点。对于每一个子节点:
    • 如果该节点在close列表中,则丢弃它
    • 如果该节点在open列表中,则检查其通过当前节点计算得到的F值是否更小,如果更小则更新其F值,并将其父节点设置为当前节点。
    • 如果该节点不在open列表中,则将其加入到open列表,并计算F值,设置其父节点为当前节点。
  5. 转到2步骤

概括:

1、两个集合+一个公式
* openlist\closelist --- 集合
* F=G+H  --- 公式
* openlist:可达到的格子
* closelist:已经到达的格子
* G:从起点到当前格子的成本
* H:不考虑障碍的情况下,当前格子到目标格子的距离
* F:G+H

代码如下:

package com.wemew.wmgame.sort;

import java.util.ArrayList;
import java.util.List;

/**
 * A*寻路算法
 * <p>
 * 寻路算法
 * 1、两个集合+一个公式
 * openlist\closelist
 * F=G+H
 * openlist:可达到的格子
 * clo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值