狄克斯特拉算法(Dijkstra算法),《学点算法吧,Python》

目录

狄克斯特拉算法

迪克斯特拉算法原理

狄克斯特拉算法Python实现代码

1.有权图的Python代码实现

2.最低费用表和父节点表的Python实现

 3.狄克斯特拉算法的Python实现

4.计算结果展示


狄克斯特拉算法

狄克斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。


迪克斯特拉算法原理

Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

原理:根据初始点,挨个的把离初始点最近的点一个一个找到并加入集合,集合中所有的点的距离都是该点到初始点最短路径长度,由于后加入的点是根据集合S中的点为基础拓展的,所以也能找到最短路径。

过程可以参考下图

我们来具体分析一下算法过程:

1.先建立三个表格

第一个表是加权图的表格描述,

第二个表是到每个节点的最短距离,我们姑且称为最低费用表 ,可以看到我们整个算法过程都是围绕这个表格展开的。

第三个表是当前最低费用表数据生成的路径描述,由各节点当前选择的父节点组成。用于算法完成后出发节点S到终点节点F的最短路径的生成。

2.从S点出发,先更新到邻居节点的距离,到达A和B分别是5和0,此时我们只知道S→A和S→B两个路径,所以我们对最低费用表,更新A 为 5和B 为 0。同时更新父节点表中A、B的父节点。

具体如下图。(最低费用表代表我们当前能找到的到达相应节点最短的距离,父节点表代表相应路径中节点的父节点。)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值