Python-Dijkstra的算法实现

Posted joker-yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-Dijkstra的算法实现相关的知识,希望对你有一定的参考价值。

Python-Dijkstra的算法实现

最近参加比赛要开始积累一些python的算法的代码实现,但是想从网上看看有没有比较合适优化的一些算法,由于博主本人比较菜鸡,所以感觉网上给出的代码比较复杂,由此决定自己来写一份关于python的一些经典算法的实现方式。
如果有待改进的地方,还请各位斧正。
代码实现: #数据结构使用了邻接矩阵matrix

def Dijkstra(matrix,n,Maxline): #matrix[x][y]表示:点x到点y的权值
    dst=list(Maxline for i in range(n)) #定义初始点均不可到达[m,m,m......m]
    dst[0]=0
    comp=0#定义已经取出的集合,已经包括初始点00
    uncomp=i+1 for i in range(n-1)
    while ((not uncomp)!=True):        #uncomp集合非空
        list_uncomp=list(uncomp) #将集合uncomp转换成列表进行索引操作
        list_comp=list(comp)#将集合comp转换成列表进行索引操作
        Min=Maxline
        for i in range(len(list_uncomp)):
            v_point=list_uncomp[i]      #假设要取的在集合uncomp的点
            for j in range(len(list_comp)):
                uv_point=list_comp[j]   #取出已知集合comp的一个点
                if(matrix[v_point][uv_point]<Min):
                    Min=matrix[v_point][uv_point]
                    get_point=v_point   #拟定要从uncomp取出的点
                    ready_point=uv_point #拟定要从comp取出的点
                elif(matrix[uv_point][v_point]<Min):
                    Min=matrix[uv_point][v_point]
                    get_point=v_point   #拟定要从uncomp取出的点
                    ready_point=uv_point #拟定要从comp取出的点
                    
        uncomp=set(list_uncomp) #将列表list_uncomp转换成集合uncomp
        uncomp.remove(get_point)
        comp.add(get_point)
        dst[get_point]=dst[uv_point]+Min #赋予到达get_point的距离

    #跑完集合uncomp
    return dst

find=Dijkstra([[999,10,5,999],[999,999,3,999],[999,4,999,1],[999,2,999,999]],4,999)
print(find)
            

原创

以上是关于Python-Dijkstra的算法实现的主要内容,如果未能解决你的问题,请参考以下文章

使用来自 UIPanGestureRecognizer 的输入实现自然滚动算法

单链表的实现

冒泡排序算法可视化

C语言过滤相同行算法

KNN算法的实现

Paxos工程实践