A*简介

A*(A-Star)算法是一种启发式算法,是静态路网中求解最短路最有效的方法。公式表示为:f(n)=g(n)+h(n),

其中f(n) 是节点n从初始点到目标点的估价函数,

g(n) 是在状态空间中从初始节点到n节点的实际代价,

h(n)是从n到目标节点最佳路径的估计代价。

网上大量的A*算法教程都是将搜索区域分成无数个小方格,再分别从小方格的8个方向进行计算,如下图:

而我们熟悉的 Dijkstra 算法却是在点线图上进行计算的,这曾经让我一度以为方格图和点线图是这两者的区别之一,但实际应用中会因为各种各样的原因使用点线图,这就使我进行了进一步的学习,后来,我找了几段源码进行一段时间的学习,发现事实上并不是,这只是表现形式的不一样而已,两者的区别在于有没有估计值,即 Dijkstra 和 A* 的主要区别在于前者为后者h(n)=0时的特殊情况。下面是我学习后的理解,并且在实际开发中已经得到检验是可行的。

1、数据结构

  1)点

  id、坐标(x、y)

  2)线

  id、起点、终点、是否可逆(考虑单行线的情况)

2、搜索过程

(1)   设置路径起止点,例如黄色为起点,蓝色为终点;

(2)   定义类 queue (名称自定,下同),包含 distance、maxDistance、endNode、path,其中,distance 表示起点到当前点的前一点的路径值(这个真的没搞懂为什么是前一点,但事实证明就是前一点,囧),maxDistance表示当前点到终点的两点间距离值(公式中的估计值,可自己定义其他估计值)加上该点的 distance,endNote 表示目标点,path 则表示到目标点的路径(经过的点的集合);

(3)   定义queue的列表,记录遍历过程中的记录,并按照 maxDistance 从小到大排列;

(4)   将起点设为当前点,由点的连接线的 id 可以获得所有与该点相邻点的 id,则可知起点与 a、d 相邻,分别将 a 和 d 设为目标点(endNode),并将 a 点和 d 点的 queue 加入列表并将列表按 maxDistance 由小到大排序,若目标点除了前一点之外无任何相邻点,则将 maxDistance 设为 ∞;

(5)   取出列表中 maxDistance 最小的记录,将 endNode 设为当前点后重复步骤(4)-(5),直到endNode为蓝色点,即终点为止。

以上是我的学习结果,欢迎大家一起讨论······

点线图中的A*算法的更多相关文章

  1. 图中最短路径的算法--dijiska算法C语言实现

    #include <stdio.h> #include <stdlib.h> #define ERROR_NO_MEM -1 /*内存不足的错误码*/ #define MAX_ ...

  2. 如何看K线图基础知识

    在日K线图中一般白线.黄线.紫线.绿线依次分别表示:5.10.20.60日移动平均线,但这并不是固定的,会根据设置的不同而不同,比如你也可以在系统里把它们设为5.15.30.60均线. 你看K线图的上 ...

  3. 第六篇:R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

    数据分布图简介 中医上讲看病四诊法为:望闻问切.而数据分析师分析数据的过程也有点相似,我们需要望:看看数据长什么样:闻:仔细分析数据是否合理:问:针对前两步工作搜集到的问题与业务方交流:切:结合业务方 ...

  4. 箱线图(boxplot)简介与举例

    简述:   盒图是在1977年由美国的统计学家约翰·图基(John Tukey)发明的.它由五个数值点组成:最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(m ...

  5. UOJ#373. 【ZJOI2018】线图 搜索,树哈希,动态规划

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ373.html 前言 真是一道毒瘤题.UOJ卡常毒瘤++.我卡了1.5h的常数才过QAQ Orzjry 标算居然是指数做法 ...

  6. R绘图 第六篇:绘制线图(ggplot2)

    线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...

  7. PHP使用HighChart生成股票K线图详解

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  8. javascript实现有向无环图中任意两点最短路径的dijistra算法

    有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...

  9. 图中最短路径算法(Dijkstra算法)(转)

    1.Dijkstra 1)      适用条件&范围: a)   单源最短路径(从源点s到其它所有顶点v); b)   有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E ...

随机推荐

  1. cdoj 1136 邱老师玩游戏 树形背包

    邱老师玩游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1136 Desc ...

  2. Codeforces Gym 100610 Problem K. Kitchen Robot 状压DP

    Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10061 ...

  3. 检测到有潜在危险的 Request.Form

    今天在做一个.net的新闻发布器的时候. 遇到这样的一个问,在html编辑器里面加入图片提交的时候 就报一个 从客户端(content1="<img src="/web/ne ...

  4. 如何获取input自定义属性

    javascript方法: <input type="checkbox"  name="sdf"  data="这是自定义属性" /& ...

  5. Asp.Net 之 使用Form认证实现用户登录 (LoginView的使用)

    1. 创建一个WebSite,新建一个页面命名为SignIn.aspx,然后在页面中添加如下的代码 <div class="div_logView"> <asp: ...

  6. Tick and Tick

    The three hands of the clock are rotating every second and meeting each other many times everyday. F ...

  7. 使用 collectionView 实现表头,区头,区尾

    UICollectionView 的使用是跟表的使用是一样,瀑布流的布局会比表的效果更好,这里说一下 collectionView 设置表头, 区头,区尾 设置表头可以约束 collectionVie ...

  8. 编写一个单独的Web Service for Delphi

    早段时间看了一篇好文章,对其整理成以下几步 1新建一个SOAP Server Application,在提示输入接口时输入MyHello,把所有文件保存在一个叫Ser的目录下,其中一个包含TWebMo ...

  9. Vim编辑器的常用快捷键.

    Linux中的文本操作离不开Vim编辑器的使用. Vim编辑器的使用相对门槛较高.需要挺长一段时间的适应. 总结一些Vim使用过程中常用的命令(这些命令基本上都是在vim的命令模式下使用) 1.跳转到 ...

  10. [改善Java代码]使用匿名类的构造函数

    建议39: 使用匿名类的构造函数 阅读如下代码,看看是否可以编译: public class Client { public static void main(String[] args) { Lis ...