迪杰斯特拉算法的python实现

迪杰斯特拉算法python的实现

参考资料:数据结构(清华大学出版社)

最近放暑假,想重拾数据结构,因此写了个迪杰斯特拉的代码练练手,可能会有bug。
没有经过多次测试,哈哈

如何插入一段漂亮的代码片

// 采用矩阵来存储有向图
import numpy as np
g=np.array([1000,1000,10,1000,30,100,1000,1000,5,1000,1000,1000,1000,1000,1000,50,1000,1000,
             1000,1000,1000,1000,1000,10,1000,1000,1000,20,1000,60,1000,1000,1000,1000,1000,1000])
g=g.reshape((6,6))
def dijkastra(o,p):#int,返回最短o点到p点的最短路径
    S=[o]
    t=[]
    d=[]
    dic={}
    while len(S)<6:
        for i in range(0,6):
            if i not in S:
                if g[o][i]!=1000:
                    t.append(g[o,i])
                    dic[g[o][i]]=i
        j=t[0]
        for i in t[1:]:
            if i<j:
                j=i
        S.append(dic[j])
        if dic[j]==p:
            return j
        t=[]
        d=[]
        dic={}
        for i in range(0,6):
            if i not in S:
                for j in S:
                        if j!=o:
                            if g[j][i] != 1000:
                                if g[j][i]+g[o][j]<g[o][i]:
                                    g[o][i]=g[j][i]+g[o][j]
                
a=dijkastra(0,5)
print(a)
                


第一篇文章,比较简陋,哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值