tomasfdel

Complementos I Práctica Lab 4

Sep 26th, 2017
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.27 KB | None | 0 0
  1. #! /usr/bin/python
  2. # 4ta Practica Laboratorio
  3. # Complementos Matematicos I
  4. # Consigna: Implementar los siguientes metodos
  5.  
  6. from Queue import PriorityQueue
  7.  
  8. def dijkstra(grafo, vertice):
  9.     '''
  10.    Dado un grafo (en formato de listas con pesos), aplica el algoritmo de
  11.    Dijkstra para hallar el COSTO del camino mas corto desde el vertice de origen
  12.    al resto de los vertices.
  13.    Formato resultado: {'a': 10, 'b': 5, 'c': 0}
  14.    (Nodos que no son claves significa que no hay camino a ellos)
  15.    '''
  16.     diccionario = {}
  17.     diccionario[vertice] = 0
  18.    
  19.     cola = PriorityQueue()
  20.     cola.put((0,vertice))
  21.    
  22.     while not cola.empty():
  23.         (peso_actual, vert_actual) = cola.get()
  24.         if(diccionario[vert_actual] < peso_actual):
  25.             continue
  26.         for (origen, destino, peso) in grafo[1]:
  27.             if(origen == vert_actual):
  28.                 if(not(diccionario.has_key(destino)) or peso_actual + peso < diccionario[destino]):
  29.                     diccionario[destino] = peso_actual + peso
  30.                     cola.put((peso_actual + peso, destino))
  31.        
  32.     return diccionario
  33.  
  34.  
  35. def dijkstra_2(grafo, vertice):
  36.     '''
  37.    Dado un grafo (en formato de listas con pesos), aplica el algoritmo de
  38.    Dijkstra para hallar el CAMINO mas corto desde el vertice de origen
  39.    a cada uno del resto de los vertices.
  40.    Formato resultado: {'a': ['a'], 'b': ['a', 'b'], 'c': ['a', 'c']}
  41.    (Nodos que no son claves significa que no hay camino a ellos)
  42.    '''
  43.     diccionario = {}
  44.     diccionario[vertice] = (0, [vertice])
  45.    
  46.     cola = PriorityQueue()
  47.     cola.put((0,vertice))
  48.    
  49.     while not cola.empty():
  50.         (peso_actual, vert_actual) = cola.get()
  51.         if( diccionario[vert_actual][0] < peso_actual):
  52.             continue
  53.         for (origen, destino, peso) in grafo[1]:
  54.             if(origen == vert_actual):
  55.                 if(not(diccionario.has_key(destino)) or peso_actual + peso < diccionario[destino][0]):
  56.                     diccionario[destino] = (peso_actual + peso, diccionario[origen][1] + [destino])
  57.                     cola.put((peso_actual + peso, destino))
  58.    
  59.     return {vertice:camino for vertice,(peso, camino) in diccionario.items()}
  60.  
  61.  
  62. def main():
  63.     pass
  64.  
  65. if __name__ == "__main__":
  66.     main()
Add Comment
Please, Sign In to add comment