2. Astar数据结构 + 公式
1、两个数据结构
- Open表,用来存储当前能够到达的结点
- Close表,用来存储已经到达过的结点
2、一个公式
(1)公式:F = G + H
每一个格子拥有三种属性,即:

(2)三种属性的意义
- G:从起始结点走到当前结点需要花费多少步(已经花了的步数)
- H:不考虑障碍的情况下,从当前结点走到终点需要花费的步数(预估仍然需要花的步数)
- F:对G和H的综合评估,也就是路径上如果拥有这个格子的话,最终需要花费的步数数量的预估
3. 算法步骤
1、第一轮操作
- 首先,我们需要将起点(机器人起始点)放到open表中

- 在【Open表】中寻找出一个F值最小的结点作为【当前结点】,把【当前结点】移出【Open表】并且加入到

- 当前的父子结点关系如下

2、第二轮操作
因为当前的【Open表】不为空并且没有找到【end结点】,所以重复第一轮的第二三步操作
- 寻找【Open表】中F值最小的结点作为【当前结点】,把【当前结点】移出【Open表】并且放入【Close
表】,接下来是对【当前结点】进行扩展
- 检查【当前结点】四周是否有能够到达的结点(扩展结点),如果这些【扩展结点】不在【Open表】中或者
【Close表】中,就把这些【扩展结点】计算出F值后加入到【Open表】中,并且把【当前结点】设置为这些【扩展结点】的父节点。

- 因为(3, 3)是【障碍物】,(3, 1)已经存在于【Close表】中,所以这两个结点都不加入【Open表】中
当前的父子结点关系如下:

3、第三轮操作
接下来的方式就是重复以下步骤:
- 从【Open】表中寻找F值最小的结点移入【Close表中】并且当作【当前结点】进行检查扩展
- 将能够到达的新结点加入到【Open表】中
下面是全部的过程的动图示例,仔细看F的值,每次都选择F值最小的结点进行检查扩展
原图链接:「代码随想录」知识星球
全站分卷索引 · 42 卷
- 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
- 2找出所有子集的异或总和再求和
- 3哈希表
- 4哈希冲突
- 5红黑树与AVL树
- 6平衡二叉树(AVL树)
- 7将有序数组转换为二叉搜索树
- 83. 分割(组合问题)
- 9方法论
- 10509. 斐波那契数
- 1162. 不同路径
- 1296. 不同的二叉搜索树
- 13322. 零钱兑换
- 14爬楼梯
- 15背包小总结 (01背包、完全背包)
- 16子序列问题
- 17674. 最长连续递增序列
- 18115. 不同的子序列
- 19总结
- 20技巧总结
- 21时间序列模型
- 22区间DP模型
- 23664. 奇怪的打印机
- 24编辑距离
- 25回文串
- 26DP递推公式总结
- 27排序算法
- 28其他算法
- 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
- 302. TOP N问题
- 313. 分布式的TOP N问题
- 322. Astar数据结构 + 公式
- 334. 代码实现
- 345. 总体代码
- 35堆排序
- 36单源最短路
- 37思维导图
- 38链表
- 39回溯
- 40贪心
- 41动态规划
- 42排序