Astar寻路算法
A* (ASTAR) 算法
简介
...
步骤
1. 将开始节点放入开放列表(开始节点的F和G值都视为0);
2.重复一下步骤,直到结束条件满足
i. 在开放列表中查找具有最小F值的节点,并把查找到的节点作为当前节点;
ii.把当前节点从开放列表删除, 加入到封闭列表;
iii.对当前节点相邻的每一个节点依次执行以下步骤:
1. 如果该相邻节点不可通行或者该相邻节点已经在封闭列表中,则什么操作也不执行,继续检验下一个节点;
2. 如果该相邻节点不在开放列表中,则将该节点添加到开放列表中, 并将该相邻节点的父节点设为当前节点,同时保存该相邻节点的G和F值;
3. 如果该相邻节点在开放列表中, 判断若经由当前节点到达该相邻节点的G值是否小于原来保存的G值,
若小于,则将该相邻节点的父节点设为当前节点,并重新设置该相邻节点的G和F值.
iv. 循环结束条件:
当终点节点被加入到开放列表作为待检验节点时, 表示路径被找到,此时应终止循环;
或者当开放列表为空,表明已无可以添加的新节点,而已检验的节点中没有终点节点则意味着路径无法被找到,此时也结束循环;
3. 从终点节点开始沿父节点遍历, 并保存整个遍历到的节点坐标,遍历所得的节点就是最后得到的路径;
关键值计算
F = G+H
G=从起点A到一个给定点的距离。
H=从给定点到终点的估计值。这种方式常叫做试探,有几种计算方法:(使用其中一个即可)
//曼哈顿估价法 private function manhattan(node:Node):Number { return Math.abs(node.x - _endNode.x) * _straightCost + Math.abs(node.y + _endNode.y) * _straightCost; } //几何估价法 private function euclidian(node:Node):Number { var dx:Number=node.x - _endNode.x; var dy:Number=node.y - _endNode.y; return Math.sqrt(dx * dx + dy * dy) * _straightCost; } //对角线估价法 private function diagonal(node:Node):Number { var dx:Number=Math.abs(node.x - _endNode.x); var dy:Number=Math.abs(node.y - _endNode.y); var diag:Number=Math.min(dx, dy); var straight:Number=dx + dy; return _diagCost * diag + _straightCost * (straight - 2 * diag); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现