一直就很想把A*看一下,虽然所早的项目一直没用上A*,但是对它还是情有独钟,
可能是打心底的对寻路比较有好奇感把。原本网上关于A*的解释说明的文章数不胜数,
但是我还是想把自己所理解的写在自己的博客上,方便日后的回顾,
当然还是从各位大牛那一点点的积累下来的。
一、A*算法总结:
1.
将开始节点放入开放列表(开始节点的F和G值都视为0);
2.
重复一下步骤:
i.
在开放列表中查找具有最小F值的节点,并把查找到的节点作为当前节点;
ii.
把当前节点从开放列表删除,
加入到封闭列表;
iii.
对当前节点相邻的每一个节点依次执行以下步骤:
(a.
如果该相邻节点不可通行或者该相邻节点已经在封闭列表中,则什么操作也不执行,继续检验下一个节点;
(b.
如果该相邻节点不在开放列表中,则将该节点添加到开放列表中, 并将该相邻节点的父节点设为当前节 点,同时保存该相邻节点的G和F值;
(c.
如果该相邻节点在开放列表中,
则判断若经由当前节点到达该相邻节点的G值是否小于原来保存 的G值,若小于,则将该相邻节点的父节点设为当前节点,并重新设置该相邻节点的G和F值.
iv.
循环结束条件:
当终点节点被加入到开放列表作为待检验节点时, 表示路径被找到,此时应终止循环;
或者当开放列表为空,表明已无可以添加的新节点,而已检验的节点中没有终点节点则意味着路径无法被找 到,此时也结束循环;
3.
从终点节点开始沿父节点遍历,
并保存整个遍历到的节点坐标,遍历所得的节点就是最后得到的路径;
二、路径排序
决定哪些方格会形成路径的关键是下面这个等式:
F = G + H
这里
·G=从起点A沿着已生成的路径到一个给定方格的移动开销。
·H=从给定方格到目的方格的估计移动开销。这种方式常叫做试探,有点困惑人吧。其实之所以叫做试探法是因为这只是一个猜测。在找到路径之前我们实际上并不知道实际的距离,因为任何东西都有可能出现在半路上(墙啊,水啊什么的)。本文中给出了一种计算H值的方法,网上还有很多其他文章介绍的不同方法。
我们要的路径是通过反复遍历开放列表并选择具有最小F值的方格来生成的。
三、功能拓广
1.
使用二叉堆优化开放列表,缩短检索的时间,因为它是最耗时的;
2.
A*的最小路径问题;
3.
对于不同大小的人物角色的寻路技巧;
4.
与Djikstra算法的对比;
(这部分下次有空的时候好好的补上.)
四、优缺点
网上有很多。
先去睡觉了,下次再分享一个大牛的代码,我先整理下。
分享到:
相关推荐
总结起来,A* Pathfinding Project Pro 4.1.16是Unity开发者实现高效、灵活且可扩展的寻路功能的理想选择。它的强大功能、易用性和持续的更新支持,使得这个插件成为了游戏开发工具箱中的重要一环。通过利用A*算法的...
A*算法是一种在图形搜索中广泛应用的启发式搜索方法,其目标是找到从起点到终点的最短路径。在这个特定的场景中,我们讨论的是如何使用A*算法来解决N数码问题,这是一个经典的计算机科学问题,是8数码问题的扩展。8...
总结,A*算法是一种在路径规划问题中寻找最优解的强大工具,通过结合实际代价和启发式估计,它能够在保证找到最短路径的同时,显著减少搜索时间和计算资源。在实际应用中,A*算法需要根据具体的环境和问题特点,设计...
6. **结论与展望**:总结项目成果,讨论可能的改进方向和未来研究。 通过以上内容,我们可以看到,"A*算法解决十五数码问题(Python程序、报告)"这个项目不仅涵盖了计算机科学中的经典算法,还涉及了人工智能领域...
总结: 本文对汇编语言和C语言矩阵A*B+C*D的运算进行了讲解,包括C语言和汇编语言的实现步骤和知识点。矩阵运算是计算机科学和工程领域的基础知识,理解矩阵运算可以帮助读者更好地理解和应用计算机科学和工程知识...
#### 总结 A*算法是一种非常强大的路径搜索技术,在解决复杂的逻辑谜题如传教士与野人过河问题时表现出色。通过合理的设计数据结构和启发式函数,可以有效地减少搜索空间,提高算法效率。虽然题目中的代码示例较为...
根据提供的文件内容,我们可以总结出以下关键知识点,这些知识点主要围绕使用 A* 算法解决 8 数码问题(也称作滑动拼图问题)的过程和技术细节展开。 ### 1. A* 算法简介 A* 算法是一种广泛应用于路径寻找和图遍历...
**A* 路径搜索算法详解** ...### 总结 A*算法是解决路径搜索问题的强大工具,尤其在需要高效寻路的场合。通过理解和应用A*算法,开发者可以为各种需要智能决策的系统设计出精准且高效的路径规划。
总结而言,"非常完整的A*算法具体实例代码"提供了一个可运行的C++实现,帮助开发者理解和应用A*算法解决最短路径问题。通过阅读和学习这个代码,不仅可以了解A*算法的工作原理,还能掌握如何在实际项目中实施这个...
总结来说,A*算法是一种强大的路径搜索工具,它利用启发式信息来指导搜索,以达到更快地找到最优路径的目的。在理解和实现A*算法的过程中,我们需要重点掌握启发式函数的设计、优先队列的管理以及节点的评估策略,...
资源为Hybrid A * 算法Python源码,该资源是博客 动力学约束下的运动规划算法——Hybrid A*算法(附程序实现... 第三部分是结合前面第一部分的理论和第二部分的详细源码,对Hybrid A * 算法的流程进行综合的概括总结。
总结,A*算法是路径规划中的高效工具,通过合理选择启发式函数和处理地图障碍,可以在复杂环境中找到最优路径。"基于A*算法的路径规划"项目提供了一个直观、用户友好的方式来实现这一算法,为实际应用提供了便利。
总结起来,A*算法是机器人路径规划中的核心算法,它结合了实际代价和启发式信息,以高效的方式找到最优路径。MATLAB提供了一个优秀的平台来实现和调试这类算法,通过对`Aplanning`文件的分析,我们可以深入理解A*...
总结来说,《cocos2d A*算法游戏demo》是一个生动的学习资源,它将理论知识与实践相结合,帮助开发者深入理解cocos2d-x游戏引擎以及A*算法在游戏寻路中的应用。通过研究这个项目,开发者不仅可以掌握游戏开发的基本...
【标题】8数码问题A*算法Java...总结来说,这个Java实现利用A*算法高效地解决了8数码问题,通过启发式函数进行有效的路径搜索。通过分析和理解这两段代码,我们可以深入理解A*算法的原理以及如何将其应用于实际问题中。
【阵列信号处理中的DOA算法分类】 阵列信号处理是一种关键的技术,广泛应用于通信、雷达、声纳等场景,通过布置在空间不同位置的传感器阵列,对信号进行采样,以提升信号质量,抑制干扰,定位信号源并提取信息。...
- **B**: "若 a 是实型变量,C 程序中允许赋值 a=10,因此实型变量中允许存放整型数"。这是正确的。 - **C**: "在 C 程序中,无论是整数还是实数,都能被准确无误地表达"。这是不准确的,浮点数存在精度损失的问题...
七、总结 A*算法在解决八数码问题上表现出高效的性能,因为它利用了启发式信息来指导搜索。通过C++实现,我们可以直观地理解算法的运作过程,并对其进行调试和优化。提供的代码包含详细的注释,有助于学习者理解和...
《数字电子技术基础核心知识总结》是对数字电子技术这一领域基础知识的提炼,涵盖了逻辑代数的基本公式、组合逻辑电路的分析与设计等多个方面。以下是详细的知识点解析: **逻辑代数的基本公式**: 1. **互反律**:...
**总结**:选项 A“研发人员”是 CMMI 初始级成功的重要因素之一,因为这一级别的组织通常缺乏标准化的过程定义。 #### 十三、C# 中的引用类型 - C# 中的引用类型包括 String、Class 和 Delegate,但不包括 int。 ...