Dijkstra

本文深入讲解了Dijkstra算法,一种用于寻找单源最短路径的贪婪算法。通过实例演示了如何初始化图参数,并逐步找到离源点最近的顶点,以此扩展到所有点的最短路径。提供了一个Python实现的例子,展示了算法的具体应用。

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

Dijkstra算法

指定一个点到其他各顶点的路径——单源最短路径

初始化图参数

G = {1:{1:0, 2:1, 3:12},
2:{2:0, 3:9, 4:3},
3:{3:0, 5:5},
4:{3:4, 4:0, 5:13, 6:15},
5:{5:0, 6:4},
6:{6:0}
}

每次找到离源点最近的一个顶点,然后以该顶点为重心进行扩展最终的到源点到其余所有点的最短路径
一种贪婪算法

def Dijkstra(G,v0,INF=999):
    """ 使用 Dijkstra 算法计算指定点 v0 到图 G 中任意点的最短路径的距离
        INF 为设定的无限远距离值
        此方法不能解决负权值边的图
    """
    book = set()
    minv = v0
    
    # 源顶点到其余各顶点的初始路程
    dis = dict((k,INF) for k in G.keys())
    dis[v0] = 0
    
    while len(book)<len(G):
        book.add(minv)                                  # 确定当期顶点的距离
        for w in G[minv]:                               # 以当前点的中心向外扩散
            if dis[minv] + G[minv][w] < dis[w]:         # 如果从当前点扩展到某一点的距离小与已知最短距离      
                dis[w] = dis[minv] + G[minv][w]         # 对已知距离进行更新
        
        new = INF                                       # 从剩下的未确定点中选择最小距离点作为新的扩散点
        for v in dis.keys():
            if v in book: continue
            if dis[v] <= new: 
                new = dis[v]
                minv = v
    return dis


dis = Dijkstra(G,v0=1)
print dis.values()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值