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 481 Apparent Magnitude 水题

    Apparent Magnitude Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/sh ...

  2. SOA面向服务化编程架构(dubbo)

      dubbo 是阿里系的技术.并非淘宝系的技术啦,淘宝系的分布式服务治理框架式HSF啦 ,只闻其声,不能见其物.而dubbo是阿里开源的一个SOA服务治理解决方案,dubbo本身 集成了监控中心,注 ...

  3. ViewGroup源码部分解析

    ViewGroup的官方解析是: A <code>ViewGroup</code> is a special view that can contain other views ...

  4. python 2.5源代码编绎

    VS C++项目中,选择工程项名称,右菜单中选择--->仅适用于项目---->仅生成(项目) 1.make_buildinfo,make_versioninfo make_buildinf ...

  5. Jordan Lecture Note-10: Kernel Principal Components Analysis (KPCA).

    Kernel Principal Components Analysis PCA实际上就是对原坐标进行正交变换,使得变换后的坐标之间相互无关,并且尽可能保留多的信息.但PCA所做的是线性变换,对于某些 ...

  6. MDIO/MDC(SMI)接口

    转载:http://blog.chinaunix.net/uid-24148050-id-132863.html 1. 简介 The MDIO interface is a simple, two-w ...

  7. DAG上动态规划

    很多动态规划问题都可以转化为DAG上的最长路,最短路,或路径计数问题. 硬币问题: 有N中硬币,面值分别为v1,v2,v3,……vn,每种都无穷多,给定非负整数S,可以选用多少个硬币,使他们的总和恰好 ...

  8. DOM+Javascript一些实例

    1.内容+遮罩层+悬浮对话框 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  9. MYSQL基础笔记(六)- 数据类型一

    数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...

  10. 采用虚拟命名管道的字符设备和阻塞型I/O实现进程间的通信实现KWIC程序

    采用虚拟命名管道的字符设备和阻塞型I/O实现进程间的通信实现KWIC程序专业程序代写c++程序代写