首页 > 编程语言 >路径规划算法之Dijistra算法、A*算法

路径规划算法之Dijistra算法、A*算法

时间:2024-08-07 15:18:14浏览次数:8  
标签:代码 路径 Dijistra 最短 算法 集合

引言

  • 记录一下这段时间了解到的路径规划算法,并进行代码的实现
  • 目前主流的路径规划算法可以分为:
    1. 基于采样,如RRT、RRT*、PRM
    2. 基于节点,如Dijistra、A、D
    3. 基于数学模型,如MILP、NLP
    4. 基于生物启发式,如NN、GN
    5. 多融合,如PRM-Nodebased

Dijistra algorithm

问题描述

Dijistra算法主要用于求解最短路径。
可以将问题抽象为:对于无向图G=<V,E>,每条边E[i]的长为W[i],找出由顶点每个点的最短路径。其中V为点集,E为边集。

核心思想

  • 维护一个数组,表示从起点到这个点的最短路径
  • 引入两个集合SUS用于记录已经求出最短路径的顶点,U用于记录未求出最短路径的顶点
  • 用过遍历S中的元素,选取U中最优的下一个节点,加入S中,并不断重复,知道找出所有点的最优路径。

伪代码

  1. 将起点设为最新点,更新最短路径数组
  2. 选取最短路径中的最小值,作为新的最新点,更新最短路径数组
  3. 重复第二步直至U集合为空

算法实例

step1:S={A}

A B C D E F G
0 6 3

选择C为最新的拓展点并加入S集中

step2:S={A,C}

A B C D E F G
0 5 3 7

在U集合中,B最小,遂取B为新的拓展点并加入S中
step3:S={A,C,B}

A B C D E F G
0 5 3 11 7

在U集合中,E最小,加入S集合
step4:S={A,C,B,E}

A B C D E F G
0 5 3 9 7 12 9

在U集合中D,G都为最小,假设取D放入S集中

step5:S={A,C,B,E,D}

A B C D E F G
0 5 3 9 7 12 10

将G放入S中
step6:S={A,C,B,E,D,G}

A B C D E F G
0 5 3 9 7 12 10

F的最小路径不用更改
此时U集合为空集,结束规划。

代码实例

A* algorithm

背景

A算法最初发表于1968年,由Stanford研究院的Peter Hart, Nils Nilsson以及Bertram Raphael发表。它可以被认为是Dijkstra算法的扩展。
由于借助启发函数的引导,A
算法通常拥有更好的性能。

核心思想

\(g(n)=f(n)+h(n)\)
\(h(n)\) 为启发式函数

伪代码

算法实例

C++代码实现

Matlab仿真

标签:代码,路径,Dijistra,最短,算法,集合
From: https://www.cnblogs.com/alee1106/p/18338744

相关文章

  • 数组的算法
    数组的算法目录数组的算法1.数组排序2.数组查找3.数组求和、求最大值和最小值4.数组反转5.数组乱序6.数组复制7.数组去重1.数组排序冒泡排序:通过重复遍历要排序的数组,比较相邻元素的大小,并在必要时交换它们的位置,直到整个数组排序完成。冒泡排序的时间复杂度为O(n^2)......
  • 不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认
    原文链接:https://www.cnblogs.com/wwssgg/p/17984105今天运行项目的时候出现了这个错误....查了一下解决的方法。 具体方案如下: 1、先确认安装IIS的时候有没有装Asp.Net,如果没安装的话,安装上即可。(XTHS:采用这步,就可以了!) 2、IIS采用了更安全的web.config管理机制,默......
  • 数据结构 - 并查集路径压缩
    ......
  • kmp算法模板
    模板//pi代表前缀函数 //pi[i]:s[0~i]的最长匹配真前后缀长度 vecotr<int>pi(str.size()); //求前缀函数 for(inti=1;i<str.size();i++){ intlen=pi[i-1];//前一个值的pilen是我们想要找到的一个长度值 while(len!=0&&str[i]!=str[len]){//不匹配时,......
  • 【数据结构与算法】删除循环队列中第k个元素的算法 C++实现(循环队列+模运算)
    数组a[MaxSize]用作一个循环队列,front指向循环队列中队头元素的前一个位置,rear指向队尾元素的位置。设计删除队列中第k个元素的算法。思路首先,判断kkk是否在有效范围内......
  • 【数据结构与算法】在循环队列中第k个元素之后插入元素的算法 C++实现(循环队列+模运算
    数组a[MaxSize]用作一个循环队列,front指向循环队列中队头元素的前一个位置,rear指向队尾元素的位置。设计在队列中第k个元素之后插入item的算法。思路首先,检查输入的位置k是否在合理的范围内,即1到queueSize(Q)(包含两端)。如果k在这个范围外,那么返回ERROR。然后,计......
  • AOE网及其求解关键路径
    全称ActivityonEdgeNetwork边活动网特点仅存在有向无环图 作用用于记录完成整个工程至少花费的时间==>哪条路径最耗时?也就是“关键路径”AOE网元素介绍关键活动关键路径上的活动称为关键活动,关键活动是不允许拖延的(普通活动可以拖延,拖延时间=最晚开始时......
  • 算法力扣刷题记录 六十八【131.分割回文串】
    前言回溯章节第六篇。切割问题。记录六十八【131.分割回文串】。一、题目阅读给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。回文串指字符串从前读和从后读一样。返回s所有可能的分割方案。示例1:输入:s="aab"输出:[["a","a","b"],["aa","b"]]......
  • Java计算机毕业设计基于协同过滤算法的商品推荐系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息爆炸的时代,电商平台上的商品数量呈指数级增长,用户在面对海量商品时往往感到无所适从,难以快速找到符合自身需求和喜好的商品。传统的搜索方式虽......
  • 【NOI】C++算法设计入门之穷举
    文章目录前言一、概念1.导入2.概念二、例题讲解1.简单穷举问题:1015.鸡兔同笼问题问题:1351.买公园门票问题:1016.买小猫小狗问题:1220.买糕点问题:1396.开学大采购?2.嵌套穷举问题:1022.百钱百鸡问题问题:1024.购买文具问题:1249.搬砖问题问题:1250.马克思手稿的问题......