zoukankan      html  css  js  c++  java
  • A*算法

      A*读作A-star。是用来寻找最短路径的一种算法实现。

    • 原理:

      它仅仅是一个启发式搜索算法。就是说在一个可以被穷举的有限解空间集中,用比较有效的方法(主要是利用估价函数)求出最优解的算法。

    把地图分成若干个格子,把起始点的格子上标作 0 。然后根据将周围一圈可以通畅的格子上标为1。然后再把所有标上 1 的格子周围可以通达的格子标为 2 ,当然,如果那些格子上已经有过数字了(一定比 2 小)就不用标了。

      如此反复迭代下去,我们地图上的终点只要可以通达,就一定会被标上数字。而这个数字就是理论最短的距离,而标记过的每个格子都有一个前导的入口(即它由附近一个比它小 1 的格子引导过来)整个标记的过程逆推,也就找到了最短路径。

    备注:原理这块文字直接从云风BLOG中CTRL+C,CTRL+V来的,如果作者觉得不合适,可以随时删除掉。

    • 关键点:

    如果一个格子被多个路径同时需要存值时:
    1、如果为空,填值;
    2、被非第一次填值时,需要判定已有值与将被填的值大小:如果小,则填充;大,放则弃;相等,存储为集合。
    3、存在一种可能,找不到解(需要设定一些界限,来优化)。(这种情况下,会遍历图中所有可以到达的点)

    • 示例:

    存储路径方式一:
    (1,1)=>(0,0),(1,1)
     (2,2) =>(0,0),(1,1),(2,1)
     (3,2) =>(0,0),(1,1),(2,1),(3,2)
     (4,2) =>(0,0),(1,1),(2,1),(3,2),(4,2)
     (5,3) =>(0,0),(1,1),(2,1),(3,2),(4,2),(5,3)
    存储路径方式二:
    存前置的点,也可能前置有多个点(同时到达),类似链表的存储方式。

    说明:以上内容是记录和同事liuhaosong一起研读云风的文章《A* 算法之误区》的过程记录。

    参考:云风BLOGhttp://blog.codingnow.com/2006/07/astar.html

  • 相关阅读:
    3. 算法分析
    4. union-find算法
    1.基础编程模型和数据抽象
    2. 背包,队列和栈
    .NET Core 单元测试
    ASP.NET Core Web API
    ASP.NET Core MVC 之区域(Area)
    ASP.NET Core MVC 之依赖注入 Controller
    ASP.NET Core MVC 之依赖注入 View
    微服务架构学习与思考(04):微服务技术体系
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/6523842.html
Copyright © 2011-2022 走看看