python编写dijkstra算法

来源:互联网 发布:mac 桌面下方出现白条 编辑:程序博客网 时间:2024/05/16 15:32
'''示例结果:init[1, 0, 0, 0, 0, 0] [0, 30, 15, 1000, 1000, 1000] [0, 0, 0, 0, 0, 0]process[1, 1, 1, 1, 1, 1] [0, 25, 15, 50, 40, 30] [2, 1, 5, 4, 3, 0]'''MAX_NUM = 1000v_len = 6                       #顶点数S = [0 for i in range(v_len)]   #作为mark容器,检验顶点是否已经被添加path = S[:]         #存储添加顶点过程dist = []           #放置到每个顶点的最短长度'''邻接矩阵'''edge = [    [0,30,15,MAX_NUM,MAX_NUM,MAX_NUM],    [5,0,MAX_NUM,MAX_NUM,20,30],    [MAX_NUM,10,0,MAX_NUM,MAX_NUM,15],    [MAX_NUM,MAX_NUM,MAX_NUM,0,MAX_NUM,MAX_NUM],    [MAX_NUM,MAX_NUM,MAX_NUM,10,0,MAX_NUM],    [MAX_NUM,MAX_NUM,MAX_NUM,30,10,0]    ]def init(start):    for i in range(0,v_len):        dist.append(edge[start][i])    dist[start] = 0    S[start] = 1    path[0] = start    print 'init\n',S,dist,path      #初始化结果显示def find_min():                     #开始处理    print 'process'    u = 0    for i in range(0,v_len-1):        mini = MAX_NUM        for j in range(0,v_len):            if(not S[j] and dist[j]<mini):                u = j                mini = dist[j]        S[u] = 1        path[i] = u        for k in range(0,v_len):            if(not S[k] and edge[u][k]<MAX_NUM and dist[u]+edge[u][k]<dist[k]):                dist[k] = dist[u] + edge[u][k]    print S,dist,path;              #显示结果def py_dijkstra(start):    init(start)    find_min()if(__name__=="__main__"):    py_dijkstra(0)                 #以0为源点                        


0 0