最短路径算法——A*算法

A*算法是静态路网中求解最短路径最有效的直接搜索算法,也是解决许多搜索问题的有效算法,广泛应用于机器人路径搜索、游戏动画路径搜索等。它是图搜索算法的一种。

A*算法是一种启发式的搜索算法,它是基于深度优先算法(Depth First Search, DFS)和广度优先算法(Breadth First Search, BFS)的一种融合算法,按照一定原则确定如何选取下一个结点。

参考:A*寻路算法详解 #A星 #启发式搜索_哔哩哔哩_bilibili

【路径规划】全局路径规划算法——A*算法(含python实现 | c++实现)_a*算法路径规划-CSDN博客

A*算法使用一个路径优劣评价公式为:
f ( n ) = g ( n ) + h ( n )

f(n) 是从初始状态经由状态n到目标状态的代价估计,
g(n) 是从初始状态到状态n的实际代价,
h(n) 是从状态n到目标状态的最佳路径的估计代价。

算法步骤:

1.首先确定两个数组,openlist和closelist,openlist存储当前要处理的点的集合,closelist存储处理过的点,把起点加入 openList 。

重复如下过程:

2.遍历 openList ,查找 F 值最小的节点,把它作为当前要处理的节点。把这个节点移到 closeList 。

3.如果是在二维平面中,这个点周围会有八个相邻点,根据不同的类型做如下处理。

 ◆ 如果它是不可抵达(障碍物阻挡)的或者它在 closeList(已处理过的点) 中,忽略它;

 ◆如果它不在 openList 中,则把它加入 openList ,并且把当前方格设置为它的父节点(方面记录路径),记录该方格的f、g、h值。

◆ 如果它已经在 openList 中,检查这条路径 ( 即经由当前方格到达它那里 ) 是否更好,用 g 值作参考,更小的 g  值表示这是更好的路径。如果g gg值更小,把该节点的父节点设置为当前方格,并重新计算它的 g 和 h 值。

停止搜索的情况有两种:

 ◆把终点加入到了openList 中,此时路径已经找到了

 ◆查找终点失败,并且 openList 是空的,此时没有路径。

保存路径。使用回溯的方法,从终点开始,每个方格沿着父节点移动直至起点,这就是最终搜索到的路径。

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

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

相关文章

pgsql-使用dump命令制作数据库结构、数据快速备份bat脚本

一、背景 通过pgsql的dump命令可以快速的做数据库表结构、表数据的备份,随着业务不断的增加单库单实例已经不能满足业务需要。技术人员是比较懒惰的,每次敲相同命令或是无脑的复制黏贴操作感觉都是对精神的一种摧残,解决摧残的方法就是把命令…

脑肿瘤有哪些分类? 哪些人会得脑肿瘤?

脑肿瘤,作为一类严重的脑部疾病,其分类复杂多样,主要分为原发性脑肿瘤和脑转移瘤两大类。原发性脑肿瘤起源于颅内组织,常见的有胶质瘤、脑膜瘤、生殖细胞瘤、颅内表皮样囊肿及鞍区肿瘤等。其中,胶质瘤作为最常见的脑神…

dict 之ai学习

我的代码: k["name","age","job"] v1["zhangsan",25,"programmer"] v2["lisi",33,"worker"] v3["wangwu",55,"scientist"] s4dict(zip(k,v1,v2,v3)) for key,valu…

Java 零基础自学,如何系统全面地自学 Java 语言?

粉丝问:他只是一个普通人,初识Java,真的很想学好它。但是现在却只是在网上课堂上看Java基础课程(入门知识,面向对象,常用类,异常等等)看着看着就发现一头雾水,没有方向&a…

nodejs学习之process.env.NODE_ENV

简介 process对象是 Node 的一个全局对象,提供当前 Node 进程的信息。它可以在脚本的任意位置使用,不必通过require命令加载。该对象部署了EventEmitter接口。 process.env 属性返回包含用户环境的对象 使用 pnpm init新建index.js const { env } r…

【C++】类和对象(二)

个人主页 创作不易,感谢大家的关注! 文章目录 ⭐一、类的默认成员函数💎二、构造函数⏱️三、析构函数🏝️ 四、拷贝构造函数🎄五、赋值运算符重载🏠六、取地址运算符重载🎉const成员 ⭐一、类…

系统架构设计师教程 第3章 信息系统基础知识-3.7 企业资源规划(ERP)-解读

系统架构设计师教程 第3章 信息系统基础知识-3.7 企业资源规划(ERP) 3.7.1 企业资源规划的概念3.7.2 企业资源规划的结构3.7.2.1 生产预测3.7.2.2 销售管理(计划)3.7.2.3 经营计划(生产计划大纲)3.7.2.4 …

C语言 | Leetcode C语言题解之第240题搜索二维矩阵II

题目&#xff1a; 题解&#xff1a; bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){int i 0;int j matrixColSize[0] - 1;while(j > 0 && i < matrixSize){if(target < matrix[i][j])j--;else if(target > matrix[…

ORBSLAM3 ORB_SLAM3 Ubuntu18.04 ROS Melodic 虚拟镜像 下载

build.sh 和 build_ros.sh编译结果截图&#xff1a; slam测试视频&#xff1a; orbslam3 ubuntu18.04 test 下载地址&#xff08;付费使用&#xff0c;不能接受请勿下载&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/13YeJS4RGa3fBrG8BKfPbBw?pwds6vg 提…

Docker 运维常用命令及问题案例

目录 以下是一些常见的 Docker 命令&#xff1a; 镜像相关&#xff1a; 容器相关&#xff1a; 数据卷相关&#xff1a; 网络相关&#xff1a; 其他&#xff1a; 常见问题案例&#xff1a; 案例一&#xff1a;容器无法启动 案例二&#xff1a;容器性能问题 案例三&…

运维 | Linux 系统中 MySQL 的安装与使用记录

Linux 系统中 MySQL 的安装与使用记录 介绍 基本信息 在 Linux 系统中&#xff0c;MySQL 是一种常用的关系型数据库管理系统。 MySQL 默认安装位置&#xff1a;/var/lib/mysql 检查默认安装位置&#xff1a; which mysql该命令将显示 MySQL 二进制可执行文件的路径。在大…

python--实验15 数据分析与可视化

目录 知识点 1 数据分析概述 1.1流程 1.2定义 1.3数据分析常用工具 2 科学计算 2.1numpy 2.1.1定义 2.1.2创建数组的方式 2.1.3np.random的随机数函数 3 数据可视化 3.1定义 3.2基本思想 3.3Matplotlib库 3.3.1模块 4 数据分析 4.1Pandas 4.2数据结构 4.3基…

伪原创文章生成器软件,为你自动写作文章效率高

在当今快节奏的数字化时代&#xff0c;内容创作的需求如潮水般涌来。无论是博主们需要频繁更新的优质博文&#xff0c;还是企业宣传需要的大量文案&#xff0c;亦或是学者们的研究成果阐述&#xff0c;都对写作的效率提出了极高的要求。而就在这时&#xff0c;伪原创文章生成器…

软件测试点

案例&#xff1a; 需求&#xff1a; 动物品系&#xff1a;动物类型-动物品系体重&#xff1a;[1,无穷)年龄&#xff1a; 等价类&#xff1a;6个 界面测试&#xff1a; 默认值、颜色、布局动物品系下拉框&#xff0c;数据来源&#xff0c;排序规则 功能测试&#xff1a; …

Python游戏开发之制作捕鱼达人游戏-附源码

制作一个简单的“捕鱼达人”游戏可以使用Python结合图形界面库&#xff0c;比如Pygame。Pygame是一个流行的Python库&#xff0c;用于创建视频游戏&#xff0c;它提供了图形、声音等多媒体的支持。以下是一个基础的“捕鱼达人”游戏框架&#xff0c;包括玩家控制一个炮台来射击…

Java并发编程与高并发解决方案笔记

本课程将结合大量图示及代码演示&#xff0c;带你掌握多线程并发编程&#xff08;线程安全&#xff0c;线程调度&#xff0c;线程封闭&#xff0c;同步容器等&#xff09;与高并发处理思路与手段&#xff08;扩容&#xff0c;缓存&#xff0c;队列&#xff0c;拆分等&#xff0…

Linux—KVM虚拟化中(虚拟机克隆,快照,还原,删除)等应用实例

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

在不同环境中,Java应用程序和MySQL等是如何与Docker进行交互和操作的?

1. 本地开发环境 在本地开发环境中&#xff0c;可以使用Docker Compose来管理和运行Java应用程序容器和MySQL容器。通常&#xff0c;会创建一个docker-compose.yml文件&#xff0c;定义需要的服务及其配置。 以下是一个示例docker-compose.yml文件: version: 3 services:app…

最优化理论与方法-第十讲-补充,鞍点与强对偶

文章目录 1. 原问题和对偶问题2. Slater 条件3. 鞍点 1. 原问题和对偶问题 用原问题(Primal Problem)中的P表示原问题&#xff0c;具体如下&#xff1a; ( P ) min ⁡ f ( x ) s t . g i ( x ) ≤ 0 , i 1 , ⋯ , m , h i ( x ) 0 , i 1 , ⋯ , l , x ∈ X \begin{equatio…

外部网络设计

外部网络设计 https://support.huawei.com/enterprise/zh/doc/EDOC1100368575/e64f745b#ZH-CN_TOPIC_0268148455 在Fabric网络的资源模型设计中&#xff0c;通过在Border节点创建外部网络&#xff0c;使得园区内部终端能够访问外部Internet等。Border上创建的每个外部网络资源…