基于搜索的路径规划算法

于图搜索的方法主要包括Dijstra方法,A算法,JPS算法,A算法是Dijstra算法的拓展,JPS算法是A*算法的拓展。

  • A*是一个比较经典的启发式寻路算法,是基于dijkstra算法,但是加入了启发函数,使路径搜索效率更高。实现起来很简单。不过要做到通用性高,比如支持各种不同类型的地图,甚至不仅仅是地图,而是个图结构如解决拼图游戏N-puzzle会用到的,就需要多花点心思。用C++实现的话,可以使用模板来适应不同的需要。也可以使用类继承。 由于A*算法无法消除对称性的问题,所以可以加入tie breaker消除对称性
  • JPS算法有一套规则去打破搜索过程中的的“对称性”,速度与效率较高,但是,JPS仅仅适用于网格地图。

下面为A*算法的流程图:
在这里插入图片描述

  1. 从起点A开始, 把它作为待处理的方格存入一个"开启列表", 开启列表就是一个等待检查方格的列表。
  2. 寻找起点A周围可以到达的方格, 将它们放入"开启列表", 并设置它们的"父方格"为A。
  3. 从"开启列表"中删除起点 A, 并将起点 A 加入"关闭列表", "关闭列表"中存放的都是不需要再次检查的方格。
  4. 检查它所有相邻并且可以到达 (障碍物和 “关闭列表” 的方格都不考虑) 的方格。如果某个相邻方格已经在 “开启列表” 里了, 检查如果用新的路径到达G值是否会更低一些, 如果新的G值更低, 那就把它的 “父方格” 改为目前选中的方格,然后重新计算它的 F 值和 G 值 (H 值不需要重新计算, 因为对于每个方块, H 值是不变的). 如果新的 G 值比较高, 就说明经过 C 再到达 D 不是一个明智的选择, 因为它需要更远的路, 这时我们什么也不做。
    就这样, 从 “开启列表” 找出 F 值最小的, 将它从 “开启列表” 中移掉, 添加到 “关闭列表”,再继续找出它周围可以到达的方块, 如此循环下去…
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值