Python实现dijkstra算法

本文介绍了Dijkstra算法的基本概念,强调了它作为单源最短路径算法的重要性,特别是对于不含负权重边的图。文章详细阐述了算法的实现原理,并通过动图辅助理解。最后,提供了Python代码实现,包括构建距离矩阵和算法的具体步骤。
摘要由CSDN通过智能技术生成

dijkstra算法

一、 简介

1、 概念

Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。

问题描述:在无向图 G=(V,E) 中,假设每条边 E[i] 的长度为 w[i],找到由顶点 V0 到其余各点的最短路径。(单源最短路径)

二、 实现原理

1、 动图演示

https://images.cnblogs.com/cnblogs_com/blogs/722174/galleries/2074790/o_220728125211_2012073019540660.gif

2、 思路解析

https://images.cnblogs.com/cnblogs_com/blogs/722174/galleries/2074790/o_220728130228_1060878-20200530174625634-1955533179.png

S集合 U集合
选A为起点,S={A}
此时的最短路径
A->A=0
以A为中心点,从A开始查找
U={B, C, D, E, F}
A->B=10
A->D=4
A->{E, F, C}= ∞ \infty
d(AD)最短
选入D,此时S={A, D}
此时最短路径
A->A=0
A->D=4
以D为中间点,从A->D这条最短路径进行查找
U={B, C, E, F}
A->D->B=6 < 10
A->D->E=10
A->D->C=19
A->D->F= ∞ \infty
d(ADB)最短
选入B,此时S={A, D, B}
此时最短路径
A->A=0
A->D=4
A->D->B=6
以B为中间点,从A->D->B这条路径进行查找
U={C, E, F}
A->D->B->C=14<19
A->D->B->E=12>10
A->D->B->F= ∞ \infty
d(ADE)最短
选入E,此时S={A, D, B, E}
此时最短路径
A->A=0
A->D=4
A->D->B=6
A->D->E=10
以E为中间点,从A->D->E这条路径进行查找
U={C, F}
A->D->E->C=11<14
A->D->E->F=22
d(ADEC)最短
选入C,此时S={A, D, B, E, C}
此时最短路径
A->A=0
A->D=4
A->D->B=6
A->D->E=10
A->D->E->C=11
以C为中间点,从A->D->E->C这条路径进行查找
U={F}
A->D->E->C->F=16
发现最短路径为A->D
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveKenny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值