Dijkstra算法原理

本文介绍了Dijkstra算法的特点,适用于解决有权图中从一点到其他所有点的最短路径问题。算法思想包括通过两个集合S和U进行迭代更新,找到最短路径并更新未求解点的距离。在详细分析部分,以A到E的最短路径为例,逐步展示了算法的执行过程,直至找到目标点。最后,注意到当U集合中有相同距离的点时,它们会被一起加入,但不会影响最终结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.特点

Dijkstra算法适合处理有权的图,从一点到其他所有点的最短路径
无优化的复杂度是O(n^2),如果需求所有点之间的最短路径,请使用 floyd
算法


二.思想

首先来一张图
在这里插入图片描述
求A与E的最短路径

  1. 引入两个集合S,U(推荐使用数组),S包括已求出最短路径的点,U包括未求出最短路径的点
  2. 将其与A未直接链接的点设为极大值
  3. 从U集合中找出路径最短的点,加入S集合,例如 A->B = 3
  4. 更新U集合路径,if ( ‘此点 到 其他点的距离 + 起始点 到 此点的距离’ < '起始点 到 其他点 ’ ) 则更新U,例如 (B->C = 1) + (A->B = 3) = 4 < (A->C=5) 所U集合中A->C的距离更新到4
  5. 重复3,4直到U集合空或找到目标点

三.详细分析

  1. 选定初始点A初始化1
    S=[A->A=0]
    U=[A->B=3,A->C=5,A->F=MAX,A->D=MAX,A->E=MAX]
  2. 选择U中最小的数值 如A->B=3加入S集合
    2
    再循环计算B->C,B->F+A-B是否大于A->C,A->F,更新U集合
    S=[A->A=0,A->B=3]
    U=[A->F=6,A->C=4,A->D=MAX,A->E=MAX]
  3. 重复上面动作直到E加入S集合
    总
    红色:第1次加入S集合
    橙色:第2次加入S集合
    黄色:第3次加入S集合
    绿色:第4次加入S集合
    蓝色:第5次加入S集合

四.注意事项

如果有U集合中有距离相同就将他们一起加入,如上图出现了两个绿色是因为A->F=6,A->D=6所以计算两次,不影响结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值