MAX_VAL=2**10 V=[] E=[] D=[] P=[] S=[] VR=[] DC=[0] a = 0 n1= int(raw_input("ingrese el numero de vertices del grafo ")) for i in range (0,n1): vertice= str(raw_input('Nombre del vertice ' )) tupla = (vertice) V.append(tupla) D.append(MAX_VAL) P.append(' ') print "Los vertices ingresados son:" print V n2= int(raw_input("ingrese el numero de arcos del grafo ")) for i in range (0,n2): inicial= str(raw_input('Nodo inicial: ' )) terminal= str(raw_input('Nodo terminal: ')) valor= int(raw_input('valor arista: ')) tupla = (inicial,terminal,valor) E.append(tupla) print "El listado de aristas son: " print E def relajar(nodo): peso = D[V.index(nodo)] for a in E[:]: if a[0] == nodo: print "Arco:" print a if a[1] not in S: objetivo_indice = V.index(a[1]) peso_actual = D[objetivo_indice] print objetivo_indice if peso_actual > peso + a[2]: D[objetivo_indice] = peso + a[2] P[objetivo_indice] = nodo DC.append(D[objetivo_indice]) E.remove(a) def extraer_barato(): print "Este es el costo minimo" print DC min_val = min(DC) DC.pop(DC.index(min_val)) return D.index(min_val) def algo(): while VR != []: nodo_a_considerar = V[extraer_barato()] print "Ahora el nodo a revisar es "+(nodo_a_considerar) VR.remove(nodo_a_considerar) S.append(nodo_a_considerar) relajar(nodo_a_considerar) print "Este es el listado de valores de las rutas =",D print "P =",P def init(): VR[:]=V[:] DC[0] = D[0] = 0 def main(): init() algo() if __name__ == '__main__': main()