def Dijkstra_Algorithm(G, r, a): for v in G.nodes(): #para todos os nós em G G.node[v]['lambda'] = float('inf') #inicializo todos os lambdas deles com infinito G.node[v]['prede'] = 0 #e todos predecessores com 0 G.node[r]['lambda'] = 0 #inicializa o lambda da raiz como 0 G.node[1]['lambda'] = 0 Q = [] Q = G.nodes(data=True) #arvore geradora minima S = [] while(len(Q) > 1): Q.sort(key=lambda x: x[1]['lambda']) #ordena os vertices pelo valor de lambda u = Q[0] #pega o vertice de menor lambda Q.remove(u) #remove da lista de prioridades S.append(u) #insere na arvore for v in G.neighbors(u[0]): v = (v,G.node[v]) weight = int(a[u[0]][v[0]]) #pega o peso da matriz na posicao u[0] e v[0], aresta (u[0],v[0]) # - que retorna o numero do vertice #relaxa a aresta if(v[1]['lambda'] > (u[1]['lambda']+weight) ): G.node[v[0]]['lambda'] = u[1]['lambda']+weight G.node[v[0]]['prede'] = u[0] arvore, posicao = Gera_Arvore_Peso(G,a) return arvore, posicao