python 实现 Dijkstra最短路径问题

本文介绍了如何使用Python实现Dijkstra算法来找到图中节点间的最短路径。通过详细的代码块展示了解决这一图论问题的具体步骤。

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

代码块

# -*- coding:utf-8 -*-
'''

    dijkstra 算法计算最短路径,通过优先队列Q优化,图G用邻接表保存
    dij(G,s)返回以s为源点,到途中所有点的最短路径
    优先队列Q的每个element保存结点和s到该结点的最短距离值
    在所有未访问的点中,从Q的栈顶取出结点v和s到v的最短距离值
    对所有从v出发的边的终点y,更新dis[y]=min(dis[y],dis[v]+l(v->y))

'''

class stack(list):
    add=list.append


def dij(G,s):
    '''
    dis保存源点到所有点的最短距离值
    '''
    dis=[1000000 for i in range(VN)]  #距离值初始化
    dis[0]=0
    dis[s]=0
    '''
       优先队列Q的每个结点保存vertice和s到该vertice的最短距离
    '''
    Q=stack()
    Q.add([s,dis[s]])
    '''
        从Q的栈顶取出结点v和s到v的最短距离值
        对所有从v出发的边的终点y,更新dis[y]=min(dis[y],dis[v]+l(v->y))
    '''
    while Q:
        node=Q.pop()
        v,dsv=node[0],node[1]
        for i in range(len(G[v])):
            y=G[v][i]
            vout,dvy=y[0],y[1]
            if dis[vout]>dsv+dvy:       
                dis[vout]=dsv+dvy
                Q.add([y[0],dis[vout]])
    return dis







if __name__ == "__main__":
    fr=open('dijtest.txt')
    VN=15  #number of vertices+1
    arr1=fr.readlines()
    G= [[] for i in range(VN)]
    for line in arr1:
        line=line.split()
        ver=int(line[0])
        outver=len(line)-1
        G[ver]=[[] for i in range(outver)]
        for i in range(1,len(line)):
            outv=int(line[i].split(',')[0])
            outd=int(line[i].split(',')[1])
            G[ver][i-1].append(outv)
            G[ver][i-1].append(outd)

    dis=dij(G,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值