【算法】Dijkstra算法

戴克斯特拉算法(Dijkstra's Algorithm),由荷兰杰出计算机科学家艾兹赫尔·戴克斯特拉设计,是解决非负权有向图中单源最短路径问题的经典算法。它构建了一个逐步扩展的最短路径树,从指定的源点出发,逐步探索并确定到图中所有其他顶点的最短路径。这一算法在网络路由选择、地理信息系统路径规划等领域有着广泛的应用,也常常作为其他复杂图算法的基础组件。

Dijkstra算法是一种用于在图中找到单源最短路径的算法。它适用于带有非负权重的图。算法的主要思想是维护一个距离数组,该数组记录从源点到图中每个顶点的最短距离估计值,并通过逐步找到当前距离估计值最小的顶点来更新其他顶点的距离估计值。

算法核心思想

想象你站在一个城市的某个点(源点S),想要知道到达城市中其他所有地方的最短路径。戴克斯特拉算法就是这样一个“导航工具”,它一步步地为你规划出最短路径。

算法步骤详解(换一种表述)

  1. 初始化:首先,你站在源点S上,这是你已知的最短路径的起点。你记录下从S到图中每个顶点的“当前最短估计距离”,对于可以直接从S到达的顶点,这个距离就是它们之间的边的权重;对于不能直接到达的顶点,你暂时认为这个距离是无穷大(∞),意味着你还没有找到到达那里的路径。同时,你创建两个集合:一个包含你已经探索过并确定了最短路径的顶点(我们称之为集合S),初始时只有S自己在里面;另一个包含尚未探索的顶点(集合T),开始时包含了除了S之外的所有顶点。

  2. 选择并扩展:接下来,你开始从集合T中挑选一个“看起来”离S最近的顶点W(即根据当前的最短估计距离来判断)。你把W从集合T移到集合S中,表示你已经找到了从S到W的最短路径。

  3. 更新距离:然后,你检查所有与W直接相连的顶点(即存在从W出发的边指向它们的顶点),看看是否可以通过W作为“中转站”来缩短从S到这些顶点的最短估计距离。如果可以,你就更新这些顶点的最短估计距离,并记录是通过W到达的。

  4. 重复过程:你重复步骤2和步骤3,每次从集合T中选择一个当前估计距离最小的顶点加入集合S,并更新相关顶点的最短估计距离,直到集合T为空&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值