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. Caching in ASP.NET MVC

    The caching options available in ASP.NET MVC applications don’t come from the ASP.NET MVC Framework, ...

  2. delphi 在 DragDrop 的时候,滚动 TreeView

    在 DragDrop 的时候,滚动 TreeView 当高度不够的时候   procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, ...

  3. Cts框架解析(12)-ITargetPreparer

    測试开启前的设备系统准备工作. 接口 /* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Ap ...

  4. python selenium自动化(一)点击页面链接测试

    需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回到原始页面. 要完成这个需求就必须实现3点: 1. 找 ...

  5. ResolveClientUrl("~/Styles/Site.cs")%>

    区别: <%=ResolveClientUrl("~/Styles/Site.cs")%> 和 <%=ResolveUrl("~/Styles/Site ...

  6. mysql 5.7 多源复制 原创

    一从两主:多源复制 每台mysql 服务器都需要加my.cnf要加两个参数才可以在GTID多源复制 master-info-repository=TABLE relay-log-info-reposi ...

  7. Sales_item例子

    Sales_item.h #ifndef SALES_ITEM_H #define SALES_ITEM_H #include<iostream> #include<string&g ...

  8. [Effective C++ --031]将文件间的编译依存关系降至最低

    引言:编译时间成本 在项目中我们都会碰到修改既存类的情况:某个class实现文件做了些轻微改变,修改的不是接口,而是实现,而且只改private成分. 重新build这个程序,并预计只花数秒就好,当按 ...

  9. debian7安装oracle11g

    1,安装必须包 apt-get install gcc g++  make binutils libc6 libc6-dev libstdc++6 libstdc++5 rpm gawk alien ...

  10. iCloud之旅

    1.创建BIDTinyPixDocument类 #import <UIKit/UIKit.h> //创建文档类 @interface TinyPixDocument : UIDocumen ...