Dijkstra 算法流程的举例说明

Dijkstra’s Algorithm(迪杰斯特拉算法)是求解最短路问题的一个经典算法。
本文通过一个简单的例子,举例说明其算法流程。


算法适用场景:非负网络


算例如下图所示:
算例

iteration 1:

节点标签状态
1[0, -]最优
2[100, 1]临时
3[30, 1]临时

iteration 1

iteration 2:

由于从起点(节点 1)出发所到达的节点中,节点 3 所行距离最短,故将节点 3 的状态更新为最优。
然后从节点 3 出发,继续迭代。

节点标签状态
1[0, -]最优
2[100, 1]临时
3[30, 1]最优
4[30+10, 3] = [40, 3]临时
5[30+60, 3] = [90, 3]临时

iteration 2

iteration 3:

由于节点 4 只能由节点 3 直接到达,且节点 3 已经为最优状态,故将节点 4 的状态更新为最优。
然后从节点 4 出发,继续迭代。

节点标签状态
1[0, -]最优
2[40+15, 4] = [55, 4]临时
3[30, 1]最优
4[40, 3]最优
5[90, 3] 或 [40+50, 4] = [90, 3 或 4]临时

iteration 3

iteration 4:

由于节点 2 和节点 5 的所有前序节点均为最优状态,故将所有节点的状态更新为最优,算法运行结束。

节点标签状态
1[0, -]最优
2[55, 4]最优
3[30, 1]最优
4[40, 3]最优
5[90, 3 或 4]最优

iteration 4


参考文献:

Hamdy A. Taha. Operations Research an Introduction 初级篇 Chapter 6

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值