• Source
    1. def Dijkstra_Algorithm(G, r, a):
    2.  
    3. for v in G.nodes(): #para todos os nós em G
    4. G.node[v]['lambda'] = float('inf') #inicializo todos os lambdas deles com infinito
    5. G.node[v]['prede'] = 0 #e todos predecessores com 0
    6.  
    7. G.node[r]['lambda'] = 0 #inicializa o lambda da raiz como 0
    8. G.node[1]['lambda'] = 0
    9.  
    10. Q = []
    11. Q = G.nodes(data=True)
    12.  
    13. #arvore geradora minima
    14. S = []
    15. while(len(Q) > 1):
    16. Q.sort(key=lambda x: x[1]['lambda']) #ordena os vertices pelo valor de lambda
    17. u = Q[0] #pega o vertice de menor lambda
    18.  
    19. Q.remove(u) #remove da lista de prioridades
    20. S.append(u) #insere na arvore
    21.  
    22. for v in G.neighbors(u[0]):
    23. v = (v,G.node[v])
    24.  
    25. weight = int(a[u[0]][v[0]]) #pega o peso da matriz na posicao u[0] e v[0], aresta (u[0],v[0])
    26. # - que retorna o numero do vertice
    27.  
    28. #relaxa a aresta
    29. if(v[1]['lambda'] > (u[1]['lambda']+weight) ):
    30. G.node[v[0]]['lambda'] = u[1]['lambda']+weight
    31. G.node[v[0]]['prede'] = u[0]
    32.  
    33. arvore, posicao = Gera_Arvore_Peso(G,a)
    34. return arvore, posicao
    35.