路径规划算法 - 求解最短路径 - Dijkstra(迪杰斯特拉)算法

简介: 路径规划算法 - 求解最短路径 - Dijkstra(迪杰斯特拉)算法

A*(A-Star)算法

Dijkstra(迪杰斯特拉)算法的思想是广度优先搜索(BFS) 贪心策略。

是从一个顶点到其余各顶点的最短路径算法,节点边是不各自不同的权重,但都必须是正数

如果是负数,则需要 Bellman-Ford 算法

如果想求任意两点之间的距离,就需要用 Floyd 算法

求节点0 -> 4 的最短路径

  • 每次从未标记的节点中选择距离出发点最近的节点,标记,收录到最优路径集合中
  • 计算刚加入节点A的邻近节点B的距离(不包括标记的节点),若(节点A的距离 + 节点A到节点B的边长)< 节点B的距离,就更新节点B的距离和前序节点

初始状态

节点 0 1 2 3 4 5 6 7 8 备注
最优节点 每一步,找出未标记的节点中,最短的距离,标记为最优节点
出发节点 当前节点,到每个节点的距离,刚开始,所有的节点都认为是 ∞ 无穷大
前序点 为了记录最短路径,需要记录每个节点的前序节点

从0出发

节点 0 1 2 3 4 5 6 7 8
最优节点 ✔️
0 出发 0
前序点

首先,节点0的距离是0,所有节点中距离最短的是它自己,0为最优路径中的节点

更新0邻近节点1、7

从0点出发,到 相邻的节点 1、7

0->1 = 4 , 节点 1 此时为 ∞,因此 节点 1 的 距离 标为 4,前序节点为 0

0->7 = 8 , 节点 7 此时为 ∞,因此 节点 7 的 距离 标为 8,前序节点为 0

从未标记最优节点(1~8)中,找距离出发点最小的节点 => 1

节点 0 1 2 3 4 5 6 7 8
最优节点 ✔️
0 出发 0 4 8
前序点 0 0

更新1邻近节点2、7

上一次的最优节点是 1

从0点出发,到 节点 1 相邻的节点 2、7

0->1->2 = 4 + 8 = 12 , 节点 2 此时为 ∞,因此 节点 2 的 距离 标为 12,前序节点为 1

0->1->7 = 4 + 11 = 15 , 节点 7 已有值 8,8<15,因此 节点7 的 距离、前序节点保持不变

从未标记最优节点(2~8)中,找距离出发点最小的节点 => 7

节点 0 1 2 3 4 5 6 7 8
最优节点 ✔️
0 出发 0 4 12 8
前序点 0 1 0

更新7邻近节点 8、6

上一次的最优节点是 7

从0点出发,到 节点 7 相邻的节点 8、6

0->7->8 = 8 + 7 = 15 , 节点 8 此时为 ∞,因此 节点 8 的 距离 标为 15,前序节点为 7

0->7->6 = 8 + 1 = 9 , 节点 6 此时为 ∞,因此 节点 6 的 距离 标为 9,前序节点为 7

从未标记最优节点(2~6、8)中,找距离出发点最小的节点 => 6

节点 0 1 2 3 4 5 6 7 8
最优节点 ✔️
0 出发 0 4 12 9 8 15
前序点 0 1 7 0 7

更新6邻近节点 8、5

上一次的最优节点是 6

从0点出发,到 节点 6 相邻的节点 8、5

0->7->6->8 = 8 + 1 + 6 = 15 , 节点 8 已有值 15,15=15,因此 节点 8 的 距离、前序节点保持不变

0->7->6->5 = 8 + 1 + 2 = 11 , 节点 5 此时为 ∞,因此 节点 5 的 距离 标为 11,前序节点为 6

从未标记最优节点(2~5、8)中,找距离出发点最小的节点 => 5

节点 0 1 2 3 4 5 6 7 8
最优节点 ✔️
0 出发 0 4 12 11 9 8 15
前序点 0 1 6 7 0 7

更新5邻近节点 2、3、4

上一次的最优节点是 5

从0点出发,到 节点 5 相邻的节点 2、3、4

0->7->6->5->2 = 8 + 1 + 2 + 4 = 15 , 节点 2 已有值 12,12<15,因此 节点2 的 距离、前序节点保持不变

0->7->6->5->3 = 8 + 1 + 2 + 14 = 25 , 节点 3 此时为 ∞,因此 节点 3 的 距离 标为 25,前序节点为 5

0->7->6->5->4 = 8 + 1 + 2 + 10 = 21 , 节点 4 此时为 ∞,因此 节点 4 的 距离 标为 21,前序节点为 5

从未标记最优节点(2、3、4、8)中,找距离出发点最小的节点 => 2

节点 0 1 2 3 4 5 6 7 8
最优节点 ✔️
0 出发 0 4 12 25 21 11 9 8 15
前序点 0 1 5 5 6 7 0 7

更新2邻近节点 3、8

上一次的最优节点是 2

从0点出发,到 节点 2 相邻的节点 3、5、8,节点5已标记,所以不处理节点5

0->1->2->3 = 4 + 8 + 7 = 19 , 节点 3 已有值 25,25>19,因此 节点 3 的 距离 标为 19,前序节点为 2

0->1->2->8 = 4 + 8 + 2 = 14 , 节点 8 已有值 15,15>14,因此 节点 8 的 距离 标为 14,前序节点为 2

从未标记最优节点(3、4、8)中,找距离出发点最小的节点 => 8

节点 0 1 2 3 4 5 6 7 8
最优节点 ✔️
0 出发 0 4 12 19 21 11 9 8 14
前序点 0 1 2 5 6 7 0 2

更新8邻近节点

上一次的最优节点是 8

8的邻近节点,2、7、6 都已被标记为最优节点,所以不需要处理

从未标记最优节点(3、4)中,找距离出发点最小的节点 => 3

节点 0 1 2 3 4 5 6 7 8
最优节点 ✔️
0 出发 0 4 12 19 21 11 9 8 14
前序点 0 1 2 5 6 7 0 2

更新3邻近节点

上一次的最优节点是 3

最优节点3的邻近节点:2、5、4中 2、5都已被标记为最优节点,处理 4

0->1->2->3->4 = 19 + 9 = 28 , 节点 4 已有值 21,21<28,因此 节点 4 的 距离 、前序节点保持不变

从未标记最优节点(4)中,找距离出发点最小的节点 => 4

节点 0 1 2 3 4 5 6 7 8
最优节点 ✔️
0 出发 0 4 12 19 21 11 9 8 14
前序点 0 1 2 5 6 7 0 2

已时已全部结束

最短距离

从出发点0 到节点 4 的最短距离 = 21

最短路径

反向追溯

4 的前序节点 5,5的前面是 6 ... => 4 -> 5 -> 6 -> 7 -> 0

因此 0 -> 7 -> 6 -> 5 -> 4 是最短路径

https://www.bilibili.com/video/BV1zz4y1m7Nq

目录
相关文章
|
3月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
108 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
9天前
|
算法
基于RRT优化算法的机械臂路径规划和避障matlab仿真
本课题基于RRT优化算法实现机械臂路径规划与避障。通过MATLAB2022a进行仿真,先利用RRT算法计算避障路径,再将路径平滑处理,并转换为机械臂的关节角度序列,确保机械臂在复杂环境中无碰撞移动。系统原理包括随机生成树结构探索空间、直线扩展与障碍物检测等步骤,最终实现高效路径规划。
|
3月前
|
算法 数据可视化 新制造
Threejs路径规划_基于A*算法案例完整版
这篇文章详细介绍了如何在Three.js中完整实现基于A*算法的路径规划案例,包括网格构建、路径寻找算法的实现以及路径可视化展示等方面的内容。
107 0
Threejs路径规划_基于A*算法案例完整版
|
3月前
|
存储 算法 机器人
Threejs路径规划_基于A*算法案例V2
这篇文章详细介绍了如何在Three.js中使用A*算法进行高效的路径规划,并通过三维物理电路的实例演示了路径计算和优化的过程。
100 0
|
3月前
|
存储 算法 程序员
迪杰斯特拉(Dijkstra)算法(C/C++)
迪杰斯特拉(Dijkstra)算法(C/C++)
|
5月前
|
算法 定位技术
路径规划算法 - 求解最短路径 - A*(A-Star)算法
路径规划算法 - 求解最短路径 - A*(A-Star)算法
183 1
|
5月前
|
机器学习/深度学习 算法 Java
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
这篇文章介绍了基于贪婪技术思想的Prim算法和Dijkstra算法,包括它们的伪代码描述、Java源代码实现、时间效率分析,并展示了算法的测试用例结果,使读者对贪婪技术及其应用有了更深入的理解。
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
|
5月前
|
自然语言处理 算法
HanLP — HMM隐马尔可夫模型 - 路径规划算法 - 求解最短路径 - 维特比(Viterbi)算法
HanLP — HMM隐马尔可夫模型 - 路径规划算法 - 求解最短路径 - 维特比(Viterbi)算法
70 0
HanLP — HMM隐马尔可夫模型 - 路径规划算法 - 求解最短路径 - 维特比(Viterbi)算法
|
6天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
7天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真