- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE \* MERGEFORMAT 1
博客地址:/lmnxjf/article/details/8917679
里面有详细的介绍和代码下载
这段时间学习了A*(A STAR)算法寻找最优路径算法。其实现从A点寻找到达B点的最优路径。其中用的知识有,上期介绍的链表,链表的插入与排序。首先是先用字符在命令窗口来绘制地图显示路径的,在测试算法成功后,将算法应用到基于文档的程序窗口中,更直观的显示。下面是详细介绍。
一 A*算法介绍
A* 算法是一种静态路网中求解最短路最有效的方法。公式表示为:f(n)=g(n)+h(n)
f(n) 是从初始点经由节点n到目标点的估价函数,
g(n) 是在状态空间中从初始节点到n节点的实际代价,
h(n) 是从n到目标节点最佳路径的估计代价。
其实A*算法是一种最好优先的算法只不过要加上一些约束条件罢了。由于在一些问题求解时,我们希望能够求解出 状态空间搜索的 最短路径,也就是用最快的方法求解问题,A*就可以很好的完成这个任务。
我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性。A* 算法是一个可采纳的最好优先算法。A* 算法的估价函数可表示为:
f(n) = g(n) + h(n)
这里,f(n)是估价函数,g(n)是起点到节点n的 最短路径值,h(n)是n到目标的最短路经的启发值。由于这个f(n)其实是无法预先知道的,所以我们用前面的估价函数f(n)做近似。g(n)代替g(n),但 g(n)=g(n)才可(大多数情况下都是满足的,可以不用考虑),h(n)代替h(n),但h(n)=h(n)才可(这一点特别的重要)。可以证明应用这样的估价函数是可以找到 最短路径的,也就是可采纳的。我们说应用这种估价函数的最好优先 算法就是A*算法。
我们假设某人要从?A?点移动到?B?点,但是这两点之间被一堵墙隔开。如图?1?,绿色是?A?,红色是?B?,中间蓝色是墙。
图2
图2 第一步
图1 初试状态
为完成A*算法我们事先建立好一个openlist链表和closelist链表,初始化时将第一个方块也即图1中的绿色方块位置放到openlist中。我们第一步计算的结果如图2所示。每个方格都标上了?F?,?G?,?H?的值,就像起点右边的方格那样,左上角是?F?,左下角是?G?,右下角是?H?。
1.????从起点?A?开始,并把它就加入到一个由方格组成的?open list(?开放列表?)?中。这个?open list?有点像是一个购物单。当然现在?open list?里只有一项,它就是起点?A?,后面会慢慢加入更多的项。?Open list?里的格子是路径可能会是沿途经过的,也有可能不经过。基本上?open list?是一个待检查的方格列表。
2.?????查看与起点?A?相邻的方格?(?忽略其中墙壁所占领的方格,及在closelist中的方格?)?,把其中可走的?(walkable)?或可到达的?(reachable)?方格也加入到?open list?中。把起点?A?设置为这些方格的父亲。加入openlist中是要从小到大排列这样每次取第一个链表元素就行了。
3.??????把?A?从?open list?中移除,加入到?close list(?封闭列表?)?中,?close list?中的每个方格都是现在不需要再关注的。
4.??????把新得到的F值最小的从?open list?里取出,放到?close list?中。
5.??????检查所有与它相邻的方格,忽略其中在?close list?中或是不可走?(unwalkable)?的方格?(?比如墙,水,或是其他非法地形?)?,如果方格不在?open lsit?中,则把它们加入到?open list?中。
把我们选定的方格设置为这些新加入的方格的父亲。
6.??????如果某个相邻的方格已经在?open list?中,则检查这条路径是否更优,也就是说经由当前方格?(?我们选中的方格?)到达那个方格是否具有更小的?G?值。如果没有,不做任何操作。相反,如果?G?值更小,则把那个方格的父亲设为当前方格?(?我们选中的方格?)?,然后重新计算那个方格的?F?值和G?值。
一直循环以上操作直到openlist中没有元素为止,或者是找到了终点。第一种情况是路径已被封死没有找到出口。第二种情况下,我们可以从终点的出发一直演着它的父指针知道到达起点最后绘制出来就是得到的最优路径。
图 3最终结果
二 A*算法实现
首先定义两个结构体,一个是openlist,一个是closelist,openlist前面有介绍是用来保存遍历路径的,closelist是用来保存已经遍历完的位置。结构体中应还有这些信息当前
您可能关注的文档
最近下载
- 统编版语文七年级上册第15课《梅岭三章》(教学课件).ppt VIP
- 《Unit3-A-healthy-diet》公开课教学教案.doc VIP
- 学习关于加强党的作风建设论述摘编 (2).pptx VIP
- 审计署审计项目全流程审计质量控制办法.docx VIP
- 部编道德与法治中考主观题答题技巧汇总.pdf VIP
- 2025至2030中国印染行业产业运行态势及投资规划深度研究报告.docx
- 土建质量员-案例题试卷附答案.doc VIP
- 2025年4月23日北京市税务遴选笔试真题及答案解析.doc VIP
- 苏教版初中数学八年级下册《反比例函数》单元检测试卷及参考答案.pdf VIP
- 审计署审计项目全流程审计质量控制办法.docx VIP
文档评论(0)