迪杰斯特拉(Dijkstra)最短路径算法

一、算法介绍

迪杰斯特拉算法是一种用于在带权有向图或无向图中寻找从一个特定源节点到其他所有节点的最短路径的算法。它属于贪心算法的一种,通过不断选择当前距离源节点最短距离的节点,并更新其相邻节点的距离信息,直到找到所有节点的最短路径。

算法原理

  1. 初始化
    • 设源节点为 ,将源节点到自身的距离设为 ,即 。
    • 对于其他所有节点 ,将其距离设为无穷大,即 。
    • 创建一个集合 ,用于存储已经找到最短路径的节点,初始时 。
  2. 迭代过程
    • 对于不在集合  中的每个节点 ,更新其到源节点的距离估计值。即对于从源节点经过集合  中的节点到达  的路径,如果这条路径的长度小于当前记录的 ,则更新 。
    • 选择不在集合  中且距离  最小的节点 ,将其加入集合 。
    • 重复上述步骤,直到所有节点都在集合  中。

数据结构

  1. 距离数组:使用一个数组(或列表)来存储每个节点到源节点的当前最短距离估计值。
  2. 前驱节点数组:用于记录每个节点在最短路径上的前驱节点。这有助于在找到最短路径后重构路径。
  3. 优先队列(可选):在实现中,为了高效地找到距离最小的节点,可以使用优先队列。但也可以通过简单地遍历所有不在集合  中的节点来实现。

二、案例

考虑下面一个简单的带权无向图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值