编程教程

   编程问答  ACM与蓝桥杯竞赛入门  C语言教程  C++教程  数据结构教程  单片机教程  Python教程  JAVA教程  编译器教程  C语言函数库  更多教程
Dotcpp  >   编程教程  >   搜索算法  >  图文解析A*搜索算法

图文解析A*搜索算法

点击打开 在线编译器,边学边练

A*算法是启发式搜索算法,是根据Dijkstra算法改进而来。

一、定义:是一种在图形平面上,对于有多个节点的路径求出最低通过成本的算法。它属于图遍历和最佳优先搜索算法,亦是BFS 的改进。


二、如何更好的理解A*算法?

如下图所示,S为起始(start)节点,G为目标(goal)节点。

(1)节点之间连线是两点的路径长度,如A到E的路径长度c(A,E) = 9。

(2)节点旁的h值时当前节点到达目标节点(G)的预估值,如h(A)=15, 表示从当前点A到达目标点G的估计路径长度为15,此处h(x)即为启发函数。

(3)从起点S到达当前节点x的路径长度表示为g(x) 。

(4)从起点S到达目标G并经过点x的估计距离长度表示为f(x) = g(x) + h(x),该公式是A*算法的核心公式。

(5)A*算法通过不断的选择估计距离f最小的节点,逐渐构建最短路径。

A*算法


逻辑流程

创建两个集合OPEN集,CLOSED集,算法核心是从OPEN集中选择最优(f值小最优,或f相同时,h小的更优)的节点到CLOSED集中,然后将其后继节点放入OPEN集中,然后重复操作选取最优节点,直到到达目标,或者OPEN为空为止。最后再CLOSED集中根据目标G所包含的前序节点逆序查找最后到达起点S,这个链路的逆序即最优路径,具体流程如下图。

A*算法


搜索过程

以下是前面网络的搜索过程展开图。

组合块中:

(a)灰色为前序节点

(b)蓝色当前节点x

(c)g:起点S到当前节点x的路径距离。

(d)h:当前节点x到终点G的估计距离

(e)f:起点S途径x到达终点G的估计距离,即 f = g + h

(f)绿色框为当前OPEN集合中的最优节点

(g)红色框表示当前OPEN集合中需要被删除的节点

在OPEN、CLOSED中每一行表示一次完整迭代完成时两集合中的节点集合。

最后的最优路径是:S->B->F->k->G

注:当两个节点f相同时,h小的更优

A*算法



知识点标签: 搜索


本文固定URL: https://www.dotcpp.com/course/954

上一课:

什么是启发式搜索?

下一课:

C++代码浅谈迭代加深搜索

C语言网推出会员服务,提供C/C++/算法/Python等多套视频学练课程+源码资源社群答疑+私活推荐等资源,享受丰富的技术学习到变现的乐趣,以含金量和学习效果勇敢挑战同类辅导! 点击了解开通

其他教程

C语言tell()函数:获取打开文件的指针位置

备忘录模式

Python编码规范

HTML语法规范

C语言tan()函数:正切函数

C语言getw()函数:从流中取一整数

模块概述

C语言while循环语句详解

观察者模式

C语言sprintf()函数:格式化输出到字符串中

DataInputStream和DataOutputStream类的常用方法有哪些?

C语言培训要不要参加?哪里参加?

=和==有什么区别

C语言为什么只能在黑窗口下运行

二进制整数如何转换为十进制数?

四种基本的编程命名规范

编程命名规范之下划线命名法

StringTokenizer的用法

学好编程如何赚钱(接私活)?

RandomAccessFile流的常用方法有哪些?

算法竞赛教程
第一章 算法基础
  • 1. 算法是什么?
  • 2. 深入分析算法的复杂度
  • 3. 枚举算法的思想与实例讲解
  • 4. 模拟算法实例讲解
  • 5. 贪心算法的基本思想与实例讲解
  • 6. 递归算法概念与实例讲解
  • 7. 分治算法概念与实例讲解
  • 8. 前缀和理解与应用
  • 9. 差分的理解与应用
  • 10. 二分查找(折半查找)实例讲解
  • 11. 二分答案算法实例讲解
  • 12. 倍增算法实例讲解
  • 13. 结合实例浅析构造题型
  • 14. 用C语言解答汉诺塔问题
第二章 搜索算法
  • 1. 搜索算法简介
  • 2. 结合实例解析深度优先搜索(DFS)搜索
  • 3. 结合实例解析宽度优先搜索(BFS)搜索
  • 4. 结合实例解析双向搜索
  • 5. 什么是启发式搜索?
  • 6. 图文解析A*搜索算法
  • 7. C++代码浅谈迭代加深搜索
  • 8. C++代码浅谈IDA*算法
  • 9. 回溯法入门级讲解
  • 10. 回溯法经典例题分析
  • 11. 最优化算法实例讲解
  • 12. Alpha-Beta剪枝搜索图文讲解
  • 13. Minimax算法(极小化极大算法)及实例讲解
  • 14. 舞蹈链算法(Dancing Links)运用及执行过程
  • 15. 舞蹈链算法(Dancing links)实例讲解
第三章 排序算法
  • 1. 排序算法简介
  • 2. 冒泡排序算法C/C++代码图文讲解
  • 3. 插入排序算法C/C++代码图文讲解
  • 4. 归并排序算法C/C++代码图文讲解
  • 5. 快速排序算法C/C++代码图文讲解
  • 6. 计数排序算法C/C++代码图文讲解
  • 7. 桶排序算法C/C++代码图文讲解
  • 8. 希尔排序算法C/C++代码图文讲解
  • 9. 选择排序算法C/C++代码图文讲解
  • 10. 树形选择排序(锦标赛排序)C/C++代码图文讲解
  • 11. 堆排序算法C/C++代码图文讲解
  • 12. 直接选择排序C/C++代码图文讲解
  • 13. 基数排序算法C/C++代码图文讲解
  • 14. 快速排序算法C/C++代码图文讲解
  • 15. 排序算法在日常的应用
第四章 字符串相关
  • 1. 什么是字符串(str)?
  • 2. 字符串基础知识
  • 3. C语言标准库中的字符串
  • 4. C++标准库中的字符串
  • 5. 字符串匹配实例讲解
  • 6. 解析字符串哈希(Hash)
  • 7. 字典树(trie)/前缀树(Prefix Tree)实例讲解
  • 8. KMP算法与前缀函数实例讲解
  • 9. Boyer-Moore算法图文讲解
  • 10. KMP和Z函数
  • 11. 自动机(确定有限状态自动机)
  • 12. 什么是AC自动机?
  • 13. 什么是后缀树?
  • 14. 后缀平衡树简介
  • 15. 后缀自动机(单词的有向无环图)简介
  • 16. 广义后缀自动机概述
  • 17. 序列自动机概述
  • 18. 什么是Manacher算法?
  • 19. 最小表示法算法解析
  • 20. 什么是Lyndon分解?
  • 21. 什么是后缀数组?
  • 22. 回文树/回文自动机 (PAM) 实现及模板
第五章 数学相关
  • 1. 什么是数学?
  • 2. 常用的数学运算符号及含义
  • 3. 什么是进位制?
  • 4. 位运算的应用
  • 5. 高精度计算的应用
  • 6. 复数的概念和运算
  • 7. 牛顿迭代法原理及其应用
  • 8. 什么是数值积分?
  • 9. 傅里叶-莫茨金消元法的应用
  • 10. 置换和排列的区别?
  • 11. 如何证明升幂定理?
第六章 动态规划
  • 1. 什么是动态规划?
  • 2. 动态规划概念和实例讲解
  • 3. 什么是记忆化搜索?
  • 4. 记忆化搜索实例讲解
  • 5. 超详细背包DP九讲(算法分析+问题分析+代码分析)
  • 6. 区间DP实例讲解
  • 7. DAG上的DP实例讲解
  • 8. 树形DP概念和实例讲解
  • 9. 数位DP概念和实例讲解
  • 10. 什么是状态压缩DP?
  • 11. 状态压缩DP图文实例讲解(一)
  • 12. 状态压缩DP图文实例讲解(二)
  • 13. 什么是哈希?
  • 14. 插头DP图文实例讲解
  • 15. 计数DP实例讲解
  • 16. 什么是概率DP?
  • 17. 概率DP实例讲解
  • 18. 什么是线性DP?
  • 19. 线性DP图文实例讲解
  • 20. 动态DP实例讲解
  • 21. DP优化(一)单调队列/单调栈优化实例讲解
  • 22. DP优化(二)斜率优化实例讲解
  • 23. DP优化(三)四边形不等式优化实例讲解
第七章 数据结构
  • 1. 什么是数据结构?
  • 2. 解析数据结构:八大数据结构分类
  • 3. 数据结构的特点
  • 4. 栈的定义和特点
  • 5. 什么是队列?队列的应用
  • 6. 什么是链表?
  • 7. 什么是哈希表?
  • 8. 什么是“并查集” ?
  • 9. 什么是单调栈?
  • 10. 什么是跳表?
  • 11. 简述霍夫曼树
  • 12. 手指树的基本结构
第八章 图论
  • 1. 图论部分简介
  • 2. 图的基础概念
  • 3. 图的储存方式
  • 4. 图文解析图论DFS(深度优先搜索)
  • 5. 图文解析图论BFS(广度优先搜索)
  • 6. 图论矩阵树定理实例讲解
  • 7. 有向无环图图文讲解
  • 8. 什么是拓扑排序?
  • 9. 最小生成树图文讲解
  • 10. 斯坦纳树Steiner Tree实例讲解
  • 11. DFS求有向图(无向图)两点间路径
  • 12. 树的基础知识
  • 13. 树的直径实例讲解
  • 14. 什么是树的重心?
  • 15. 树链剖分解决什么问题?
  • 16. 树上启发式合并
  • 17. 什么是虚树?
  • 18. 树哈希常用的方式
  • 19. 什么是树上随机游走?
  • 20. 简述矩阵树定理
  • 21. 图论中的有向无环图
  • 22. 什么是拓扑排序?
  • 23. 最小生成树图文解析
  • 24. 斯坦纳树的应用
  • 25. 简述最小树形图
  • 26. 网络流常用小技巧拆点
  • 27. 什么是差分约束系统?
  • 28. 欧拉图的判定
  • 29. 哈密顿图的应用
  • 30. 二分图的定义和判定
  • 31. 二分图的最大匹配、完美匹配和匈牙利算法
  • 32. 网络流的基本概念
  • 33. 最大流是什么?
  • 34. 上下界网络流总结
  • 35. 简述最大团搜索算法
  • 36. 什么是弦图?
  • 37. 简述LGV引理
  • 38. 什么是Prufer序列?
  • 39. 平面图的基本概念及性质
第九章 计算几何
  • 1. 什么是计算几何?
  • 2. 二维计算几何基础
  • 3. 三维计算几何基础
  • 4. 简述Pick定理
  • 5. 三角剖分的定义和应用
  • 6. 什么是凸包?
  • 7. 简述旋转卡壳
  • 8. 半平面交的定义和解法
  • 9. 简述随机增量法
  • 10. 反演变换的性质
第十章 其他算法
  • 1. 离散化算法实例讲解
  • 2. 常用的双指针技巧
  • 3. 在线算法和离线算法的区别
  • 4. 浅谈分数规划
  • 5. 简述随机化算法
  • 6. 悬线法实例讲解
  • 7. 什么是字节顺序?
  • 8. 浅谈约瑟夫问题
  • 9. 什么是格雷码?
  • 10. 浅谈表达式求值
  • 11. 浅析Garsia-Wachs算法
Dotcpp在线编译      (登录可减少运行等待时间)

	

代做工资流水公司鞍山查对公银行流水湘潭流水单模板大庆查询房贷流水成都代做企业贷流水兰州开收入证明洛阳打印离职证明邯郸购房银行流水查询泉州房贷银行流水 代开无锡查转账流水昆明房贷银行流水 公司扬州打印签证流水武汉购房银行流水代开长沙开签证工资流水阜阳自存银行流水费用洛阳企业银行流水代办烟台流水账单打印邢台办理在职证明南通在职证明制作扬州自存流水打印南宁银行流水账单价格宿迁制作银行流水账单海口离职证明代开台州查询对公流水南阳制作签证银行流水大庆做薪资流水单沧州背调工资流水代办镇江公司流水代做威海工资流水代办铜陵工作收入证明代开泰州车贷工资流水 模板香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化