Dijkstra算法的Python实现

#_*_coding=utf-8_*_
import numpy as np
maxNum=1000000   #用一个大数表示无穷大
def Dijkstra(G,S):
    nV=len(G[0])
    #初始化顶点访问标签
    label=np.array([False]*nV)
    label[S]=True
    #初始化距离向量
    Dis=np.array([maxNum]*5)
    for i in range(nV):
        Dis[i]=G[S][i]
    Dis[S]=0

    for i in range(nV):
        u=minDis(G,label,Dis)
        if u==nV:
            break
        if Dis[u]==maxNum:
            continue
        label[u]=True
        for j in range(5):
            if G[u][j]!=maxNum and Dis[j]>(Dis[u]+G[u][j]):
                Dis[j]=Dis[u]+G[u][j]
    return Dis
def minDis(G,label,Dis):
    u=0
    nV=len(G[0])
    #顺序查找第一个未访问顶点,全部访问则返回nV
    while(u<nV and label[u]):
        u+=1
    #查找距离更小的未访问结点
    l=range(u+1,nV,1)
    for i in l:
        if not label[i] and Dis[i]<Dis[u]:
            u=i
    return u

G=np.array([[maxNum,7,6,maxNum,maxNum],
            [7,maxNum,maxNum,3,4],
            [6,maxNum,maxNum,maxNum,2],
            [maxNum,3,maxNum,maxNum,1],
            [maxNum,4,2,1,maxNum]])
for i in range(len(G[0])):
    print Dijkstra(G,i)

>>> 
=============== RESTART: E:\DS&A\算法实现\Dijkstra\Dijkstra.py ===============

[0 7 6 9 8]
[7 0 6 3 4]
[6 6 0 3 2]
[9 3 3 0 1]
[8 4 2 1 0]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值