寻路算法

news/2025/9/22 20:38:47/文章来源:https://www.cnblogs.com/hellodeyang/p/19105990

寻路算法

寻路算法核心特性对比总表

算法 代价函数 f(n) 数据结构 是否保证最短路径? 优点 缺点 搜索行为比喻
BFS (隐含 f(n) = g(n), 且权值=1) 队列 (等权图) 简单,保证最短路径(步数最少) 效率低,无方向性,内存消耗大 圆形涟漪:均匀地向所有方向扩散
DFS 无(按深度优先) 内存消耗相对少(仅存储一条路径) 极易找到非常绕的路径,可能陷入死循环 钻探者:一条路走到黑,碰壁再回头
Dijkstra f(n) = g(n) 优先队列 (带权图) 能处理不同权重,保证最短路径(代价最小) 比BFS/DFS慢,无方向性,探索区域大 严谨的实干家:不计方向,只扩展已花费代价最小的点
GBFS f(n) = h(n) 优先队列 通常非常快,方向性极强 贪心,易被误导,结果可能非最优 贪婪的冒险家:只看终点方向,直奔而去
A* f(n) = g(n) + h(n) 优先队列 (启发函数可采纳时) 效率与最优性的完美平衡,方向性好 启发函数设计影响性能 聪明的规划师:平衡已花费代价和未来预期

详细分解

1. 广度优先搜索(BFS)

  • 核心思想:系统性地、逐层地探索所有可能的路径。
  • 数据结构队列(FIFO)。先进先出的规则保证了先被访问的节点(即离起点更近的节点)会先被扩展。
  • 与Dijkstra的关系:在所有边权值都为1的图中,BFS就是Dijkstra算法。因为此时“步数最少”就等于“代价最小”。BFS是Dijkstra在等权图下的一个高效特例实现。
  • 适用场景:查找社交网络中的最短关系链、解决迷宫问题(保证最短步数)、网络爬虫等。

2. 深度优先搜索(DFS)

  • 核心思想:尽可能深地探索一条路径,直到无法继续再回溯。
  • 数据结构栈(LIFO)。后进先出的规则保证了总是扩展最新发现的节点。
  • 与其他算法的关系:DFS与上述寻路算法哲学完全不同。它不追求最优,而是一种暴力穷举策略。在寻路中表现很差,但适用于许多其他问题(如拓扑排序、检测环路、求解数独等)。
  • 适用场景不适合用于典型的最短路径寻路。适用于需要遍历所有可能性的场景,如排列组合、图的连通性检测。

3. Dijkstra 算法

  • 核心思想:追求全局最优。它总是确信地选择当前已知的、从起点出发总实际代价最小的节点进行扩展,直到到达终点。
  • 代价函数f(n) = g(n)g(n)是确切的、累积的历史成本。它完全忽略目标点的位置信息
  • 适用场景:网络路由协议(如OSPF)、地图导航(当不考虑启发式信息时)、任何需要在带权图中找单源最短路径的场景。

4. 贪心最佳优先搜索(GBFS)

  • 核心思想:追求局部最优(贪婪)。它总是选择“看起来”离目标最近的点,希望这样能最快到达终点。
  • 代价函数f(n) = h(n)h(n)是一个启发式函数,是对未来成本的估计(如直线距离)。它完全忽略已经走了多远
  • 适用场景:对路径质量要求不高、但对速度要求极高的场景,或者在大规模地图中快速找到一个“还不错”的初始解。

5. A*(A-Star)算法

  • 核心思想平衡历史成本与未来估计。它不像Dijkstra那样盲目,也不像GBFS那样冲动。它的代价函数是两部分之和。
  • 代价函数f(n) = g(n) + h(n)
    • g(n):确保路径的正确性(朝着最短路径的方向努力)。
    • h(n):引导搜索的方向性(朝着目标点的方向努力)。
  • 关键:如果启发函数 h(n)可采纳的(即永远不会高估到达目标的实际代价),则A*保证能找到最短路径。常见的h(n)有曼哈顿距离、对角线距离、欧几里得距离。
  • 适用场景绝大多数游戏AI的寻路、机器人路径规划。它是实践中最常用、最有效的寻路算法。

直观图示与总结

想象一下在迷宫中寻找出口:

  • BFS:你会派出一大群人,手拉手并排向前走,确保不漏掉任何一条近路。稳妥但人力消耗大
  • DFS:你会随机选一条路一直走,走到死胡同就原路返回,再试下一个岔路口。运气好很快,运气差极慢
  • Dijkstra:你有一个精密的计步器。你每到一个路口,就计算从起点到这里的确切步数,然后总是从步数最少的路口继续探索绝对能找到最短路径,但可能探索了太多死胡同
  • GBFS:你有一个指向终点的指南针。你永远选择指南针指向最准的方向前进。很快就能找到路,但找到的路可能不是最短的,因为你可能被一堵墙挡住,要绕很远。
  • A:你既有一个计步器,又有一个指南针。你选择的标准是 “已走步数 + 指南针预估的剩余步数”最小的方向既能高效地朝向目标,又不会偏离最短路径太远*。

最终建议:在需要寻找最短路径的场合,A* 算法通常是默认的最佳选择。理解其他算法有助于你更深刻地理解A的原理,并在特定约束下(如内存极度受限时考虑IDA,或网格地图中考虑JPS)做出更优的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年9月22日 - 20243867孙堃2405

今天我全天有课,早八是统一建模语言,第二节是算法与数据结构,下午只有一门课JAVA语言的学习,老师告诉我们要有一个设计的思路,主要的想法就是复杂问题简单化,就是把一个大问题分解成小而易解决的问题来完成

day 1

今天上课学了数据结构和java和统一建模语言,然后自学了并查集和二叉树,练了几道模板题,希望可以提升编码能力早日可以参加算法比赛。

东莞英文建站网站改备案

【来源】 题目3 : 活动中心 【分析】 本题採用的是三分法。 输入的一组点中找出左右边界。作为起始边界。 while(右边界-左边界<精度){将左右边界构成的线段均匀分成3段&#xff0c;推断切割点的距离关系&#xff0c;抹去距离大的一段。更新左右边界。 } 输出左(右)边界 【…

网站开发程序是什么建立免费空间网站

印刷电路板将布线区域划分成nm个方格如图a所示。精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时&#xff0c;电路只能沿直线或直角布线&#xff0c;如图b所示。为了避免线路相交&#xff0c;已布了线的方格做了封锁标记&#xff0c;其它线路…

南京有哪些做网站的公司规范网站建设

在Python中调用C/C&#xff1a;cython及pybind11 转自&#xff1a;https://zhuanlan.zhihu.com/p/442935082 Python写起来非常方便, 但面对大量for循环的时候, 执行速度有些捉急. 原因在于, python是一种动态类型语言, 在运行期间才去做数据类型检查, 这样效率就很低(尤其是大规…

视频网站建设解决方案做照片书的模板下载网站

完全二叉树介绍完全二叉树应用场景完全二叉树和满二叉树的区别完全二叉树代码示例拓展 完全二叉树介绍 完全二叉树&#xff08;Complete Binary Tree&#xff09;是一种特殊的二叉树&#xff0c;它的定义是&#xff1a;如果设二叉树的深度为h&#xff0c;除第h层外&#xff0c…

网址大全2345色综合导航安徽seo网络优化师

netbeans 源文件这是一个偶然的帖子。 我一直在研究交易CDI观察者&#xff0c;并尝试使用嵌入式GlassFish对它进行一些集成测试。 但是令人惊讶的是&#xff0c;这种方法不能很好地工作&#xff0c;我仍在弄清楚&#xff0c;使用普通的嵌入式GlassFish时问题出在哪里。 同时&am…

学风建设网站版块wordpress 访客统计

目录 SQLite——DQL&#xff08;数据查询&#xff09; 数据集 select语句 条件查询 比较 确定范围 确定集合 like 查询记录 查询不重复的记录 排序和限制 排序 限制 聚合 聚合函数 语法 SQLite Group By详解 语法 实例 SQLite Having 子句 语法 实例 多…

天津网站建设制作开发公司平面设计师必看的网站

1.0 CSS介绍 CSS&#xff08;Cascading Style Sheet&#xff0c;层叠样式表)定义如何显示HTML元素。 当浏览器读到一个样式表&#xff0c;它就会按照这个样式表来对文档进行格式化&#xff08;渲染&#xff09;。 2.0 CSS语法 2.1 CSS实例 每个CSS样式由两个组成部分&#xff1…

[Paper Reading] METAGPT: META PROGRAMMING FOR A MULTI-AGENT COLLABORATIVE FRAMEWORK

目录METAGPT: META PROGRAMMING FOR A MULTI-AGENT COLLABORATIVE FRAMEWORKTL;DRMethodExperimentHumanEvalMBPP效果可视化总结与思考相关链接 METAGPT: META PROGRAMMING FOR A MULTI-AGENT COLLABORATIVE FRAMEWORK…

二进制 - 20243867孙堃2405

原码的表示分为 “符号位” 和 “数值位” 两部分,具体规则如下: 符号位:二进制数的最高位(最左边的位),用于表示正负: 符号位为 0 时,表示正数; 符号位为 1 时,表示负数。 数值位:除符号位外的其余位,直接…

建设网站要先给钱才能做英文网站怎么做外贸推广

是啊,有时候职场就是这么现实,你说你到一家公司能图啥,图它能让你享受累死累活的快感还是图他给你养老送终?还不是图那点工资,图能多学点东西在下一家公司开的高一点,多少人背井离乡不就为了博一个前程。 小蔡怎么说也算是陪公司从低谷爬起来的,至少也待了1、2年了,但是…

学习问题日记-1

学习Nginx时候,在Linux平台上安装Nginx时候遇到的问题报错。 已加载插件:fastestmirror Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&…

记一次生产环境内存溢出记录

今天同事说生产环境发生了fullGC,内存12G监控显示使用了快10G了,fullGC时候把dump文件给下载下来了,于是拿着fullGc 使用idea自带的工具分析。 发现idea自带的工具不太好用,只能显示一堆占用的char[] 和String【】,…

如何购买海外服务器常德seo公司

基础篇 1.常用图像格式介绍 常用图像像素格式 RGB 和 YUV。 1.1RGB RGB分类通常指的是将图像或颜色按照RGB&#xff08;红、绿、蓝&#xff09;颜色空间进行分组或分类。RGB图像格式通常包括RGB24&#xff08;RGB888&#xff09;、RGB32、RGBA、RGB565等。 RGB24是一种常用…

做推广网站长兴县网站建设

一、现状 低代码开发平台要让每个人&#xff0c;包括开发者和普通业务人员&#xff0c;都能够成为企业数字化过程中的主导者和构建者&#xff01;让普通人更容易上手&#xff01; 基于这一目标&#xff0c;应用需求多的云服务商成为低代码投资的主要来源。一家云服务商如谷歌云…

颜色搭配对网站重要性7zwd一起做网店官网

题8 交通灯控制系统 十字路口交通灯由红、绿两色LED显示器&#xff08;两位8段LED显示器&#xff09;组成&#xff0c;LED显示器显示切换倒计时&#xff0c;以秒为单位&#xff0c;每秒更新一次&#xff1b;为确保安全&#xff0c;绿LED计数到0转红&#xff0c;经5秒延时&#…

北京做网站的好公司什么网站做博客好

&#xff08;1&#xff09;socket套接字 1&#xff09;在linux环境下&#xff0c;socket用于表示进程间网络通信的特殊文件类型&#xff0c;其本质是内核借助缓冲区形成的伪文件&#xff08;不占磁盘空间&#xff0c;除此之外还有二进制文件&#xff0c;管道&#xff0c;字符文…

常州外贸公司网站建设寺院网站建设

点评&#xff1a;杀死进程最安全的方法是单纯使用kill命令&#xff0c;不加修饰符&#xff0c;不带标志。 首先使用ps -ef命令确定要杀死进程的PID&#xff0c;然后输入以下命令&#xff1a; # kill -pid 注释&#xff1a;标准的kill命令通常都能达到目的。终止有问题的进…

个人网站推广怎么做百度公司简介介绍

长度最小的数组 长度最小的数组 文章目录 长度最小的数组题目描述解法暴力解法滑动窗口Java示例代码c示例代码 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, num…