(9.1)Dijkstra算法

本文详细介绍了Dijkstra算法,包括其特点、原理和实现步骤。通过实例展示了如何在二维栅格地图中寻找最短路径,并提及了在地图中节点之间的距离通常是常数。文章还提到了sub2ind函数和min()函数的用法。
摘要由CSDN通过智能技术生成

一、Dijkstra算法特点:

Dijkstra算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径集。

二、Dijkstra算法原理:

Dijkstra算法采用的是一种贪心的策略,利用一个集合openlist来保存原点到各个顶点的最短距离和一个closelist集来保存已经找到的最短路径的集合。

一开始openlist中只有起始点S,且它的路径权重node_cost为0。将S点放入closelist中,然后将S的相邻节点放入openlist中。

A*算法的流程步骤为:

①、将起始点加入openlist中;

②、重复下面的过程:

        1、遍历openlist,查找node_cose值最小的节点,把它当作当前要处理的节点current_node;

        2.把这个节点加入closelist表中;

        3、对当前节点的相邻节点处理如下(对于二维平面可以选择只有直线运动的4个方向或者带

         对角线运动的8个方向):

  • a、如果它是障碍点或不可达点(边界外点)或在closelist中,忽略它;
  • b、如果它不在openlist中,把它加入openlist中,并且把当前方格设置为它的父节点,记录它的node_cost值;
  • c、如果它已经在openlist中,则说明已经有父节点可以到达这个点,则需要看通过当前节点到达它是否是更好的路径,比较node_cost是不是不原来小。如果更好,则将它的父节点设置为当前节点,并更新其node_cost值;如果openlist中是按node_cost大小排序则更改了节点的node_cost后需要重新排序;

        4、停止:当终点加入到了openlist中,或者查找失败,并且openlist是空的,此时没有路径;

        5、保存路径,从终点开始,每个方格沿着父节点移动到起点,便是路径;     

下面以一个图示说明一下(绿色代表起点,黄色代表终点,红色表示已放入closelist中,蓝色表示在openlist中,白色表示还没有遍历到):

 

 ①、按照步骤流程,一开始openlist中只有A节点,所以遍历openlist时只得到了A,并且它的node_cost=0;然后将A加入到closelist中,并从openlist中删除,将A设置为当前节点current_code;

②、由图知A的相邻节点有三个,B、C、D,他们都不在closelist中(且不是障碍点或边界外点),他们的node_cost分别为2、2、1;所以将他们加入openlist中并且父节点为A;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值