路径规划&Dijstrak算法

学习了一下路径规划中的Dijstrak算法,一开始看一个博主的感觉很懂,换了个有代码的又看不懂了...编写思想不一样但是DIjstrak算法的核心应该就是贪心思想,记录一下学习过程。

Dijkstra算法

最短路径问题---Dijkstra算法详解-CSDN博客

                                                                                                                                                                                                                    

  1. 任务:找到从起点到终点的最短路径
  2. 思想:从起点开始扩展每一步为一个节点找到最短路径。贪心策略,声明一个数组dis:保存起点到各个节点的最短距离,声明一个集合:保存已经找到了最短路径的顶点的集合。

如图所示举例说明,求顶点V1到其他各个顶点的最短路径.

  1. 声明数组并初始化为起点到各个顶点的初始距离:dis={0,无穷,10,无穷,30,100}分别表示到v1-v6的距离,不能直接到达的设为无穷。顶点集T初始化为T={V1},T收录已经找到最短距离的顶点。
  2. 由dis可知v3距离v1最短,v3加入T,加入新节点后需要看新接入的节点对数组有无影响。
  3. 下面寻到v3到达节点,为v4,看v1-v3-v4是否比v1-v4短,长度分别为60和无穷,因此dis[3]松弛为60,dis更新为dis={0,无穷,1060,30,100}
  4. 继续寻找未选定节点中的最小值,为dis[4]=30,v5也加入T集合[注:此时v4并未加入T],v5两个出路:v6.v4,v1-v5-v4=50<60,因此更新dis[3]=60,v1-v5-v6=90<100,更新dis[5],更新后:{0,无穷,10,50,30,90},T={v3,v5}
  5. 继续从未选定的点中找最小距离,除了v3v5的之外为50,即v4,v1-v5-v4-v6=60,更新到dis.dis={0,无穷,10,50,30,60}
  6. 以此类推最终得到结果:

  • 博主IR IRON ROBOT代码Dijkstra思想

若要计算从节点1到节点6的最小距离:

整体思想为:

从起点开始,找到代价最小点——代价最小点收录进closlist——找代价最小点的邻接节点并收录进openlist并更新距离——重复直到openlist为空

  1. 将起点收录进openlist,再收录进closelist【】【1(0)】
  2. 找1节点邻接节点2,4,收录进openlist,【2(2),4(1)】【1(0)】
  3. 找代价最小点4(1),没在closelist,收录进去【2(2)】【1(0),4(1)】
  4. 找4邻接节点收录进open并更新距离【2(2),3(3),6(9),7(5)】【1(0),4(1)】
  5. 找代价最小点2(2)收录进close,并找2邻接节点收录进open并更新距离【3(3),6(9),7(5),5(13)】【1(0),4(1),2(2)】
  6. 以此类推直到openlist为空

感觉稍微有点抽象,没学过数据结构也很吃亏,是不是还需要学数据结构啊,nku电子信息我恨你的课程体系...研究生一年仍是代码小白,慢慢学吧

  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值