点线图中的A*算法
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*算法的更多相关文章
- 图中最短路径的算法--dijiska算法C语言实现
#include <stdio.h> #include <stdlib.h> #define ERROR_NO_MEM -1 /*内存不足的错误码*/ #define MAX_ ...
- 如何看K线图基础知识
在日K线图中一般白线.黄线.紫线.绿线依次分别表示:5.10.20.60日移动平均线,但这并不是固定的,会根据设置的不同而不同,比如你也可以在系统里把它们设为5.15.30.60均线. 你看K线图的上 ...
- 第六篇:R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)
数据分布图简介 中医上讲看病四诊法为:望闻问切.而数据分析师分析数据的过程也有点相似,我们需要望:看看数据长什么样:闻:仔细分析数据是否合理:问:针对前两步工作搜集到的问题与业务方交流:切:结合业务方 ...
- 箱线图(boxplot)简介与举例
简述: 盒图是在1977年由美国的统计学家约翰·图基(John Tukey)发明的.它由五个数值点组成:最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(m ...
- UOJ#373. 【ZJOI2018】线图 搜索,树哈希,动态规划
原文链接www.cnblogs.com/zhouzhendong/p/UOJ373.html 前言 真是一道毒瘤题.UOJ卡常毒瘤++.我卡了1.5h的常数才过QAQ Orzjry 标算居然是指数做法 ...
- R绘图 第六篇:绘制线图(ggplot2)
线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...
- PHP使用HighChart生成股票K线图详解
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...
- javascript实现有向无环图中任意两点最短路径的dijistra算法
有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...
- 图中最短路径算法(Dijkstra算法)(转)
1.Dijkstra 1) 适用条件&范围: a) 单源最短路径(从源点s到其它所有顶点v); b) 有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E ...
随机推荐
- CDOJ 481 Apparent Magnitude 水题
Apparent Magnitude Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/sh ...
- SOA面向服务化编程架构(dubbo)
dubbo 是阿里系的技术.并非淘宝系的技术啦,淘宝系的分布式服务治理框架式HSF啦 ,只闻其声,不能见其物.而dubbo是阿里开源的一个SOA服务治理解决方案,dubbo本身 集成了监控中心,注 ...
- ViewGroup源码部分解析
ViewGroup的官方解析是: A <code>ViewGroup</code> is a special view that can contain other views ...
- python 2.5源代码编绎
VS C++项目中,选择工程项名称,右菜单中选择--->仅适用于项目---->仅生成(项目) 1.make_buildinfo,make_versioninfo make_buildinf ...
- Jordan Lecture Note-10: Kernel Principal Components Analysis (KPCA).
Kernel Principal Components Analysis PCA实际上就是对原坐标进行正交变换,使得变换后的坐标之间相互无关,并且尽可能保留多的信息.但PCA所做的是线性变换,对于某些 ...
- MDIO/MDC(SMI)接口
转载:http://blog.chinaunix.net/uid-24148050-id-132863.html 1. 简介 The MDIO interface is a simple, two-w ...
- DAG上动态规划
很多动态规划问题都可以转化为DAG上的最长路,最短路,或路径计数问题. 硬币问题: 有N中硬币,面值分别为v1,v2,v3,……vn,每种都无穷多,给定非负整数S,可以选用多少个硬币,使他们的总和恰好 ...
- DOM+Javascript一些实例
1.内容+遮罩层+悬浮对话框 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- MYSQL基础笔记(六)- 数据类型一
数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...
- 采用虚拟命名管道的字符设备和阻塞型I/O实现进程间的通信实现KWIC程序
采用虚拟命名管道的字符设备和阻塞型I/O实现进程间的通信实现KWIC程序专业程序代写c++程序代写