1、把开始节点放进开放列表,遍历开始节点所有的相邻节点(不管是否是无效地形),并将它们也加进开放列表,并设定它们的父节点。
2、把开始节点放进封闭列表(存放的是不用去考虑的节点)。
循环执行:
3、遍历计算相邻节点中的F值,F=G+H,G指的是从起点沿着已生成的路径到一个指定节点的移动开销,H指的是计算通过水平和垂直方向的平移到达目的地所经过的节点数乘以10(计算H值时不考虑任何障碍物)。
4、选取F值最小的节点,放进封闭列表,遍历该节点的所有的相邻节点(忽略那些不可通过的或者已经在封闭列表里的),如果这个相邻节点不在开放列表中,就把它添加进去,并设定它们的父节点。
5、如果某个相邻方格已经在开放列表中了,就看看有没有到达那个方格的更好的路径(G值更小的节点)。
循环结束条件:
当终点节点被加入到开放列表作为待检验节点时, 表示路径被找到,此时应终止循环;
或者当开放列表为空,表明已无可以添加的新节点,而已检验的节点中没有终点节点则意味着路径无法被找到,此时也结束循环。
6、从终点节点开始沿父节点遍历, 并保存整个遍历到的节点坐标,遍历所得的节点就是最后得到的路径。
相关教程:http://bbs.9ria.com/forum.php?mod=viewthread&tid=11026,很详细
作者的总结
A*算法总结
1.
将开始节点放入开放列表(开始节点的F和G值都视为0);
2.
重复一下步骤:
i.
在开放列表中查找具有最小F值的节点,并把查找到的节点作为当前节点;
ii.
把当前节点从开放列表删除, 加入到封闭列表;
iii.
对当前节点相邻的每一个节点依次执行以下步骤:
1.
如果该相邻节点不可通行或者该相邻节点已经在封闭列表中,则什么操作也不执行,继续检验下一个节点;
2.
如果该相邻节点不在开放列表中,则将该节点添加到开放列表中, 并将该相邻节点的父节点设为当前节点,同时保存该相邻节点的G和F值;
3.
如果该相邻节点在开放列表中, 则判断若经由当前节点到达该相邻节点的G值是否小于原来保存的G值,若小于,则将该相邻节点的父节点设为当前节点,并重新设置该相邻节点的G和F值.
iv.
循环结束条件:
当终点节点被加入到开放列表作为待检验节点时, 表示路径被找到,此时应终止循环;
或者当开放列表为空,表明已无可以添加的新节点,而已检验的节点中没有终点节点则意味着路径无法被找到,此时也结束循环;
3.
从终点节点开始沿父节点遍历, 并保存整个遍历到的节点坐标,遍历所得的节点就是最后得到的路径;
分享到:
相关推荐
在提供的3252_A算法压缩包文件中,很可能包含了实现A*算法解决N数码问题的源代码,可能包括以下几个部分: - `Node` 类:表示搜索树中的节点,包含状态、父节点、g值、h值和f值。 - `heuristic` 函数:计算启发式...
**十五数码问题** 十五数码问题,也称为十五滑块谜题或十五拼图,是一种经典的逻辑谜题。玩家需要通过移动15个标有数字的...这是一项综合性的学习任务,旨在提升学生在算法设计、问题解决以及技术报告撰写方面的能力。
尽管A*算法对于初学者来说可能显得有些复杂,但通过逐步学习与实践,可以轻松掌握其精髓。 #### 二、基础知识 **1. 搜索区域的划分** A*算法的基础在于将整个搜索区域划分为一系列的节点或方格,以便于进行路径...
总结起来,这个实验提供了对人工智能基本概念的理解,特别是A*算法在解决实际问题中的应用。通过C语言实现,你不仅可以提升编程技能,还能加深对算法复杂性和效率的认识。这个实验对于学习人工智能和搜索算法的学生...
A*算法是一种启发式搜索算法,由A算法发展而来,结合了Dijkstra算法的优点并引入了启发式函数。该算法的核心在于它能够在搜索过程中平衡探索的深度和宽度,通过评估每个节点的f(n)值来决定下一步的搜索方向,其中f(n...
**总结** 本文介绍了8数码问题,重点讲解了如何使用A*算法进行求解,并提到了其他几种搜索算法,如深度优先搜索、广度优先搜索和有序搜索。Python作为一种强大的编程工具,被用于实现这些算法。理解这些算法及其在8...
总结而言,"非常完整的A*算法具体实例代码"提供了一个可运行的C++实现,帮助开发者理解和应用A*算法解决最短路径问题。通过阅读和学习这个代码,不仅可以了解A*算法的工作原理,还能掌握如何在实际项目中实施这个...
总结来说,A*算法是寻找最短路径的有效工具,它结合了Dijkstra算法的精确性和启发式的效率。在Java中实现A*算法,主要涉及到`Node`、`Link`和搜索逻辑的`FindBestPath`类的设计和实现。通过分析和理解这些类的源代码...
通过阅读这些资料,你可以更深入地理解A*算法的工作原理,学习如何设计启发式函数,以及如何在特定问题上应用和优化A*算法。同时,也可以通过调试代码,观察不同启发式函数和参数设置对路径搜索效率的影响,从而提升...
总结起来,这个9宫格拼图游戏项目提供了一个生动的实例,让我们能够亲手操作并观察A*算法如何解决实际问题。通过学习和分析,不仅可以加深对A*算法的理解,还能提升我们的编程和问题解决能力。无论是对于初学者还是...
总结来说,A*算法、深度优先搜索和宽度优先搜索都是解决8数码难题的有效工具,各有优缺点。在实际应用中,根据问题特点和资源限制选择合适的搜索策略至关重要。理解这些算法的工作原理,并结合实际代码实现,对于...
总结来说,"用C++STL与QT实现的A*算法Demo"是一个结合了C++编程、STL容器、A*寻路算法和QT图形界面的综合项目。它不仅展示了A*算法的原理,也展现了如何在实际开发中运用这些技术,为学习者提供了宝贵的实践经验。
在提供的文件"A算法解决八数码问题c++实现[原创]_异度空间.htm"和"A算法解决八数码问题c++实现[原创]_异度空间.files"中,很可能是详细解释了如何用C++实现这个算法的代码和相关辅助文件。代码可能会包含节点类的...
【标题】:基于方向A*算法的温室机器人实时路径规划 【描述】:该文档讨论了一种用于温室机器人实时路径规划的方法,通过采用方向A*算法优化路径设计,确保路径平滑并有效避免碰撞。 【标签】:机器人、机器学习、...
总结起来,A*算法是机器人路径规划中的核心算法,它结合了实际代价和启发式信息,以高效的方式找到最优路径。MATLAB提供了一个优秀的平台来实现和调试这类算法,通过对`Aplanning`文件的分析,我们可以深入理解A*...
总结来说,《cocos2d A*算法游戏demo》是一个生动的学习资源,它将理论知识与实践相结合,帮助开发者深入理解cocos2d-x游戏引擎以及A*算法在游戏寻路中的应用。通过研究这个项目,开发者不仅可以掌握游戏开发的基本...
本文旨在通过逐步解析A*算法的工作原理,帮助读者更好地掌握这一算法的核心思想,并为进一步的学习打下坚实的基础。 #### 二、A*算法的基本概念 ##### 2.1 节点与网格 在A*算法中,整个搜索空间通常被划分为一系列...
总结,A*寻路算法是一种强大的路径搜索工具,它结合了启发式信息与实际成本,有效提高了搜索效率。理解并熟练运用A*算法,对于解决游戏开发中的路径规划问题至关重要。通过学习和实践,我们可以灵活地将其应用于各种...
总结来说,A*算法在移动机器人自学习中的应用,结合了环境感知、自我定位和路径规划技术,为机器人在未知环境中高效、安全地移动提供了有效解决方案。通过对A*算法的深入理解和优化,可以进一步提升移动机器人的自主...