python——Dijkstra最短路径(以一组具体的数据为例,也可以输入一组数据。有向图)

本文介绍了Dijkstra最短路径算法的基本原理,并通过一个具体实例解释算法的应用。使用Python编写了求解有向图最短路径的代码,探讨了代码的运行效果和存在的优化空间,包括处理大规模数据时的改进方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Dijkstra

基本原理:

            按照最短路径递增的次序,逐次搜索出从起点到网络中其余所有点的最短路径。

  • 给出从一条起点到终点的初始路径;
  • 对这条路径不断的优化,使其距离减小;
  • 当不能再被优化时,即为最短路径。

基本思想:设置一个集合S存放已经找到最短路径的顶点,S的初始状态只包含源点v,对vi∈V-S,假设从源点v到vi的有向边为最短路径。  以后每求得一条最短路径v, …, vk,就将vk加入集合S中,并将路径v, …, vk , vi与原来的假设相比较,取路径长度较小者为最短路径。重复上述过程,直到集合V中全部顶点加入到集合S中。

二、以一个实例来助于理解

如图是有向图,我们根据有的数据(顶点号,临接号,权值)画出有向图,然后根据有向图写出图的矩阵表示。

其中A,B,C,D,F,G,H分别用0,1,2,3,4,5,6,7表示。

从以上数据我们可以得到数据中:图的顶点有8个,顶点之间用有向线连接的有15条线段。

三、python代码

'''
顶点 A B C D E F G H
     0 1 2 3 4 5 6 7
A—F表示顶点号,分别用数字0,1,2,3,4,5,6,7代替;
顶点号,临接号,权值
0,1,1
0,2,4
0,3,4
1,2,2
1,4,9
2,4,6
2,5,3
2,6,4
2,3,3
3,6,7
4,7,1
5,4,2
5,7,5
6,5,1
6,7,3

'''
import sys
# 定义不可达距离
max=sys.maxsize

# points点个数,edges边个数,graph路径连通图的矩阵表示,start起点,end终点
def Dijkstra(points, edges, graph, start, end):
    map = [[max for i in rang
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值