A 星算法总结_数据结构与算法知识点总结

A 星算法总结_数据结构与算法知识点总结A星算法总结A星算法FPGAEDA工具VPR布线器所采用的布线算法,面试滴滴的时候听说他们的路径规模用的也是A星算法,感觉这个算法还蛮厉害的,对这个算法进行一个总结。文章http://www.tuicool.com/articles/MJrYz26对这个算法用语言描述的很好,搬运下:  A星寻路算法显然是用来寻路的,应用也很普遍,比如梦幻西游。。。算法的思路很简单,就是在bfs的

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

A 星算法总结

A 星算法FPGA EDA工具VPR布线器所采用的布线算法,面试滴滴的时候听说他们的路径规模用的也是A 星算法,感觉这个算法还蛮厉害的,对这个算法进行一个总结。
文章http://www.tuicool.com/articles/MJrYz26 对这个算法用语言描述的很好,搬运下:

  A星寻路算法显然是用来寻路的,应用也很普遍,比如梦幻西游。。。算法的思路很简单,就是在bfs的基础上加了估值函数。它的核心是 F(x) = G(x) + H(x) 和open、close列表。
  G(x)表示从起点到X点的消耗(或者叫移动量什么的),H(X)表示X点到终点的消耗的估值,F(x)就是两者的和值。open列表记录了可能要走的区域,close列表记录了不会再考虑的区域。我们每次都选F值最小的区域搜索,就能搜到一条到终点的最短路径,其中估值H越接近准确值,需要搜索的节点就越少。

A星算法的步骤:
{
将起点区域添加到open列表中,该区域有最小的和值。
重复以下:
  将open列表中最小F值的区域X移除,然后添加到close列表中。
  对于与X相邻的每一块可通行且不在close列表中的区域T:
如果T不在open列表中:添加到open列表,把X设为T的前驱
如果T已经在open列表中:检查 F 是否更小。如果是,更新 T的F值 和前驱
直到:
  终点添加到了close列表。(已找到路径)
  终点未添加到close列表且open列表已空。(未找到路径)
}

估值函数H(X)很有意思,不同的估值函数会带来不同的路径,因此在二维坐标系统下作了个小小的测试:

曼哈顿距离

在二维平面中 点(x1,y1)和点(x2, y2)的曼哈顿距离:H(X)= abs(x1-x2)+ abs(y1 – y2)。其中红色的点表示考察过的点,绿色的点表示最终生成的路径。
曼哈顿距离

殴几里得距离

在二维平面中 点(x1,y1)和点(x2, y2)的曼哈顿距离:H(X)= sqrt((x1-x2)* (x1-x2)+ (y1 – y2)*(y1 – y2))
这里写图片描述

水平距离

这是测着玩的: H(X)= abs(x1 – x2)
这里写图片描述

垂直距离

这也是我测着玩的:H(X) = abs(y1 – y2)
这里写图片描述

迪杰斯特拉算法

令H(x) = 0, A星算法就变成了 迪杰斯特拉算法,想想还真是!!
这里写图片描述

契比雪夫距离

H(X)= max( abs(x1 – x2), abs(y1 – y2) )
这里写图片描述

看来加上H(X)效果大有改善!!
代码为原创:http://download.csdn.net/detail/wjwever1/9669482

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188532.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月16日 下午12:19
下一篇 2026年4月16日 下午12:25


相关推荐

  • 数据库系统概论(第5版)

    数据库系统概论(第5版)个人读书笔记用书 王珊 萨师煊编著 数据库系统概论 第 5 版 第 1 章绪论操作系统是管理硬件的 数据库是管理数据的 fontsize 3 本章重点 1 概念模型的基本概念 主要建模方法 E R 图 2 关系数据模型相关概念 数据库系统三级模式和两层映射的体系结构 3 逻辑独立性和物理独立性等 本章难点 基本概念 数据模型 数据库系统体系结构 1 1 数据库系统概述数据库的 4 个基本概念 数据 Data 描述事物 fontsize 3

    2026年3月18日
    2
  • python递归写法_python递归怎么写

    python递归写法_python递归怎么写1、递归的百度百科定义程序调用自身的编程技巧称为递归(recursion)。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般…

    2022年6月18日
    33
  • C语言pow函数(c语言中指数函数怎么打)

    展开全部C语言中的POW函数使用:#include#defineACCURACY100doublefunc1(doublet,intn);doublefunc2(doubleb,intn);doublepow2(doublea,doubleb);intmain(){printf(“%lf”,pow2(5.21,4.11));return0;}doublepow2(doublea,doubleb){…

    2022年4月11日
    79
  • 开始使用linggle

    开始使用linggle网址 http linggle com Linggle 搜索引擎是一个可用于英语写作的语法 句子工具 可帮助学习者分析更准确的英文写作建议 能够根据词性来推测短句和句子 可精准的分享出完整英文句子如何撰写 Linggle 是台湾学术团队研发的网路语言搜寻引擎 台湾清华大学 Linggle 系统是少数学界开发 规模逼近业界搜寻引擎规模的特例 2008 年新开发的 Linggle 系统 Linguis

    2026年3月20日
    2
  • Java实现大数运算

    Java实现大数运算一 大数运算介绍 nbsp 大数运算 顾名思义 就是很大的数值的数进行一系列的运算 它是指由于编程语言提供的基本数值数据类型表示的数值范围有限 不能满足较大规模的高精度数值计算 因此需要利用其他方法实现高精度数值的计算 于是产生了大数运算 二 Java 实现大数运算方法 nbsp nbsp nbsp nbsp 在 BigDecimal 用法详解这篇文章中给大家介绍了 Java 中的大数类 Bi

    2025年7月8日
    7
  • 【一个小功能】从js判断ie版本,浅谈navigator对象的appName属性[通俗易懂]

    【一个小功能】从js判断ie版本,浅谈navigator对象的appName属性[通俗易懂]判断IE版本主要的是获取两个属性,a.当前浏览器名称,b.当前浏览器版本,为此不得不了解navigator对象。先贴代码作为一个初次了解navigator对象的人,对于appName属性(浏览器名

    2022年7月3日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号