Example #1
0
def main():
    a = Cola()
    for i in range(0, 10):
        a.encolar((int)(1 + random() * 20))
    a.imprimir()
    a.desencolar()
    a.imprimir()
Example #2
0
def orden_topologico(grafo):

    res = []
    orden = {}
    visitados = set()
    for v in grafo.obt_vertices():
        orden[v] = 0
    for v in grafo.obt_vertices():
        for w in grafo.obtener_vecinos(v):
            orden[w] += 1
    cola = Cola()
    for v, grado in orden.items():
        if grado == 0:
            cola.encolar(v)
    while (not cola.esta_vacia()):
        v = cola.desencolar()
        if v in visitados:
            continue
        res.append(v)
        visitados.add(v)
        for w in grafo.obtener_vecinos(v):
            orden[w] -= 1
        for v, grado in orden.items():
            if grado == 0:
                cola.encolar(v)
    return res
Example #3
0
    def contar_archivos(self, equipo):

        if equipo.cola_de_impresion.esta_vacia():
            return 0

        i = 1
        cola_aux = Cola()
        while not equipo.cola_de_impresion.esta_vacia():
            cola_aux.encolar(equipo.cola_de_impresion.desencolar())
            i +=1
        
        while not cola_aux.esta_vacia():
            equipo.cola_de_impresion.encolar(cola_aux.desencolar())

        return i
Example #4
0
def contar_personas(personas)):

        if personas.esta_vacia():
            return 0

        i = 1
        cola_aux = Cola()
        while not personas.esta_vacia():
            cola_aux.encolar(personas.desencolar())
            i +=1
        
        while not cola_aux.esta_vacia():
            personas.encolar(cola_aux.desencolar())

        return i
Example #5
0
def topologico_grados(grafo):
    g_ent = grados_entrada(grafo)
    q = Cola()
    for v in grafo:
        if g_ent[v] == 0:
            q.encolar(v)
    resultado = []
    while not q.esta_vacia():
        v = q.desencolar()
        resultado.append(v)
        for w in grafo.adyacentes(v):
            g_ent[w] -= 1
            if g_ent[w] == 0:
                q.encolar(w)
    return resultado
Example #6
0
def distancias_ady(grafo, origen, visitados, orden, dicc_dist):
    q = Cola()
    q.encolar(origen)
    visitados[origen] = True
    while not q.esta_vacia():
        v = q.desencolar()
        ady = list(grafo.adyacentes(v))
        for w in ady:
            if w not in visitados:
                visitados[w] = True
                orden[w] = orden[v] + 1
                if not orden[w] in dicc_dist:
                    dicc_dist[orden[w]] = 1
                else:
                    dicc_dist[orden[w]] += 1
                q.encolar(w)
Example #7
0
def camino_minimo(grafo, origen):
    visitados = set()
    distancia = {}
    padre = {}
    padre[origen] = None
    distancia[origen] = 0
    q = Cola()
    q.encolar(origen)
    visitados.add(origen)
    while not q.esta_vacia():
        v = q.desencolar()
        for w in grafo.adyacentes(v):
            if not w in visitados:
                padre[w] = v
                distancia[w] = distancia[v] + 1
                visitados.add(w)
                q.encolar(w)
    return distancia, padre
Example #8
0
def bfs(grafo, inicio):

    if not grafo.vertice_esta(inicio):
        return None
    cola = Cola()
    visitados = set()
    padres = {}
    padres[inicio] = None
    visitados.add(inicio)
    cola.encolar(inicio)
    while (not cola.esta_vacia()):
        vertice = cola.desencolar()
        for v in grafo.obtener_vecinos(vertice):
            if v in visitados:
                continue
            visitados.add(v)
            padres[v] = vertice
            cola.encolar(v)
    return padres
Example #9
0
def bfs(grafo, origen):
    visitados = set()
    padres = {}
    orden = {}
    padres[origen] = None
    orden[origen] = 0
    visitados.add(origen)
    q = Cola()  # usar deque de collections, NO QUEUE!!
    q.encolar(origen)
    while not q.esta_vacia():
        v = q.desencolar()
        for w in grafo.adyacentes(v):  # E1 + E2 + E3 + ... + Ev = k E
            if w not in visitados:
                padres[w] = v
                orden[w] = orden[v] + 1
                visitados.add(w)
                q.encolar(w)
    # O(V + E)
    return padres, orden
Example #10
0
def orden_topologico(grafo):
    """Solo funciona para grafo dirigido"""
    resultado = []
    cola = Cola()
    orden = {}
    for v in grafo.obtener_todos_vertices():
        orden[v] = 0
    for v in grafo.obtener_todos_vertices():
        for w in grafo.adyacentes_vertice(v):
            orden[w] += 1
    for v in grafo.obtener_todos_vertices():
        if (orden[v] == 0):
            cola.encolar(v)
    while not cola.esta_vacia():
        v = cola.desencolar()
        resultado.append(v)
        for w in grafo.adyacentes_vertice(v):
            orden[w] -= 1
            if orden[w] == 0:
                cola.encolar(w)
    return resultado
Example #11
0
def divulgar(grafo, args):
    origen = args[0]
    n = int(args[1])
    resultado = []
    visitados = set()
    orden = {}
    orden[origen] = 0
    q = Cola()
    q.encolar(origen)
    visitados.add(origen)
    while not q.esta_vacia():
        v = q.desencolar()
        for w in grafo.adyacentes(v):
            if not w in visitados:
                orden[w] = orden[v] + 1
                if orden[w] > n:
                    print(*resultado, sep=", ")
                    return
                resultado.append(w)
                visitados.add(w)
                q.encolar(w)
Example #12
0
    def bfs(self, visitar=visitar_nulo, extra=None, inicio=None):
        '''Realiza un recorrido BFS dentro del grafo, aplicando la funcion pasada por parametro en cada vertice visitado.
        Parametros:
            - visitar: una funcion cuya firma sea del tipo: 
                    visitar(v, padre, orden, extra) -> Boolean
                    Donde 'v' es el identificador del vertice actual, 
                    'padre' el diccionario de padres actualizado hasta el momento,
                    'orden' el diccionario de ordenes del recorrido actualizado hasta el momento, y 
                    'extra' un parametro extra que puede utilizar la funcion (cualquier elemento adicional que pueda servirle a la funcion a aplicar). 
                    La funcion aplicar devuelve True si se quiere continuar iterando, False en caso contrario.
            - extra: el parametro extra que se le pasara a la funcion 'visitar'
            - inicio: identificador del vertice que se usa como inicio. Si se indica un vertice, el recorrido se comenzara en dicho vertice, 
            y solo se seguira hasta donde se pueda (no se seguira con los vertices que falten visitar)
        Salida:
            Tupla (padre, orden), donde :
                - 'padre' es un diccionario que indica para un identificador, cual es el identificador del vertice padre en el recorrido BFS (None si es el inicio)
                - 'orden' es un diccionario que indica para un identificador, cual es su orden en el recorrido BFS
        '''
        if not inicio in self.vertices:
            raise KeyError

        (visitados, padre, orden) = crear_diccionarios(self.nombre_vertices)

        cola = Cola()
        cola.encolar(inicio)
        orden[inicio] = 0
        while not cola.esta_vacia():
            analizar = cola.desencolar()
            if not visitar(analizar, padre, orden, extra):
                return (padre, orden)
            dist = orden[analizar]
            if not visitados[analizar]:
                visitados[analizar] = True
            for adyacente in self.adyacentes(analizar):
                if orden[adyacente] == -1:
                    orden[adyacente] = dist + 1
                    padre[adyacente] = analizar
                    cola.encolar(adyacente)
        return (padre, orden)
Example #13
0
 def bfs(self, visitar = visitar_nulo, extra = None, inicio=None):
     '''Realiza un recorrido BFS dentro del grafo, aplicando la funcion pasada por parametro en cada vertice visitado.
     Parametros:
         - visitar: una funcion cuya firma sea del tipo: 
                 visitar(v, padre, orden, extra) -> Boolean
                 Donde 'v' es el identificador del vertice actual, 
                 'padre' el diccionario de padres actualizado hasta el momento,
                 'orden' el diccionario de ordenes del recorrido actualizado hasta el momento, y 
                 'extra' un parametro extra que puede utilizar la funcion (cualquier elemento adicional que pueda servirle a la funcion a aplicar). 
                 La funcion aplicar devuelve True si se quiere continuar iterando, False en caso contrario.
         - extra: el parametro extra que se le pasara a la funcion 'visitar'
         - inicio: identificador del vertice que se usa como inicio. Si se indica un vertice, el recorrido se comenzara en dicho vertice, 
         y solo se seguira hasta donde se pueda (no se seguira con los vertices que falten visitar)
     Salida:
         Tupla (padre, orden), donde :
             - 'padre' es un diccionario que indica para un identificador, cual es el identificador del vertice padre en el recorrido BFS (None si es el inicio)
             - 'orden' es un diccionario que indica para un identificador, cual es su orden en el recorrido BFS
     '''
     if not inicio in self.vertices:
         raise KeyError
    
     (visitados, padre, orden) = crear_diccionarios(self.nombre_vertices)
     
     cola = Cola()
     cola.encolar(inicio)
     orden[inicio] = 0
     while not cola.esta_vacia():
         analizar = cola.desencolar()
         if not visitar(analizar,padre,orden,extra):
             return (padre,orden)
         dist = orden[analizar]
         if not visitados[analizar]:
             visitados[analizar] = True
         for adyacente in self.adyacentes(analizar):
             if orden[adyacente] == -1:
                 orden[adyacente] = dist + 1
                 padre[adyacente] = analizar
                 cola.encolar(adyacente)
     return (padre,orden)
    "C:\\Users\\santi\\OneDrive\\Desktop\\EDD_1S2019_P1_201313722\\graficaLD.png"
)

objP = Pila()
objP.apilar(10, 2)
objP.apilar(11, 3)
objP.apilar(12, 4)
objP.apilar(13, 5)
objP.graficarPila()
os.system(
    "dot C:\\Users\\santi\\OneDrive\\Desktop\\EDD_1S2019_P1_201313722\\graficaPila.dot -o C:\\Users\\santi\\OneDrive\\Desktop\\EDD_1S2019_P1_201313722\\graficaPila.png -Tpng -Gcharset=utf8"
)

fila = Cola()
fila.encolar("juan", 15)
fila.encolar("mario", 20)
fila.encolar("jennifer", 5)
fila.mostrar()
fila.desencolar()
fila.desencolar()
fila.desencolar()
fila.encolar("funciono", 100)
fila.mostrar()
fila.graficar()
os.system(
    "dot C:\\Users\\santi\\OneDrive\\Desktop\\EDD_1S2019_P1_201313722\\graficaCola.dot -o C:\\Users\\santi\\OneDrive\\Desktop\\EDD_1S2019_P1_201313722\\graficaCola.png -Tpng -Gcharset=utf8"
)
os.system(
    "C:\\Users\\santi\\OneDrive\\Desktop\\EDD_1S2019_P1_201313722\\graficaCola.png"
)
Example #15
0
    tematicas.encolar(slist[2])

paginas = Cola()
for slist in data.items:
    paginas.encolar(slist[3])

editoriales = Cola()
for slist in data.items:
    editoriales.encolar(slist[4])

res = Cola()
while (not tematicas.es_vacia()):
    #Primer orden por tematica
    tempMin = min(tematicas.items)

    cTitulo = titulos.desencolar()
    cAutor = autores.desencolar()
    cTematica = tematicas.desencolar()
    cPagina = paginas.desencolar()
    cEditorial = editoriales.desencolar()

    #Revisa si tematica en cabeza es el minimo
    if (cTematica !=
            tempMin):  #Si difiere pone los registros al final de la cola
        titulos.encolar(cTitulo)
        autores.encolar(cAutor)
        tematicas.encolar(cTematica)
        paginas.encolar(cPagina)
        editoriales.encolar(cEditorial)
    else:  #Si no difiere se ubica en la cola del resultado
        res.encolar([cTitulo, cAutor, cTematica, cPagina, cEditorial])
Example #16
0
[peliculas.apilar(x) for x in pelis]

#Se pide la entrada del genero que se desea obtener

print "Escriba el genero deseado para buscar peliculas del mismo tipo"
generoDeseado = raw_input()

#Se crea la cola de peliculas del genero seleccionado

seleccionadas = Cola()

while (peliculas.es_vacia() == False):
    pelicula16 = peliculas.desapilar()
    if (pelicula16.genero == generoDeseado):
        seleccionadas.encolar(pelicula16)

#Se le da a escoger al usuario la pelicula

escogida = False
contador = 0
while (seleccionadas.es_vacia() == False and escogida == False):
    contador = +contador + 1
    print "La pelicula #", contador, "del genero seleccionado es: ", seleccionadas.desencolar(
    ).nombre
    print "¿Esta es la deseada?, responda True si esta es, por el contrario responda False"
    escogida = input()
    if (seleccionadas.es_vacia() == True and escogida == False):
        print "No existen mas peliculas de este genero, lo sentimos"
    elif (escogida == True):
        print "Te felicitamos por encontrar el titulo que buscabas"
Example #17
0
        with open(salida,"r+") as f1:
            new = match_num + '.txt' # 
            desp = despacher(new) # se carga proceso a despacher
            desp.crear_proceso(cola1) # se agrega proceso a la cola 
            contenido = f1.read()
            f1.write("\n" +str(contador_intrucciones) + "  PULL    " + "Dispatcher     102 " )
            contador_intrucciones= contador_intrucciones+1
            f1.write("\n" +str(contador_intrucciones) + "  LOAD    " + str(new) + " Dispatcher 103")
            contador_intrucciones= contador_intrucciones+1 
            f1.write("\n" +str(contador_intrucciones) + "  EXEC    " +str(new)+ " Dispatcher 104")
            contador_intrucciones=desp.exec(n,contador_intrucciones,f1,new,cola2)
            if ( cola2.is_empty == None):
                print(" ")
            else:
                if ( aux1 > 1):  
                    aux = cola2.desencolar()
                    if (aux != None):

                        contador_intrucciones = contador_intrucciones+1
                        f1.write("\n" +str(contador_intrucciones) +"  PUSH_Bloqueado " + "   "+aux.proceso + "  Dispatcher  101")
                        contador_intrucciones= contador_intrucciones+1
                        f1.write("\n" +str(contador_intrucciones) + "  PULL    " + "Dispatcher     102 " )
                        contador_intrucciones= contador_intrucciones+1
                        f1.write("\n" +str(contador_intrucciones) + "  LOAD    " + str(aux.proceso) + " Dispatcher 103")
                        contador_intrucciones= contador_intrucciones+1 
                        f1.write("\n" +str(contador_intrucciones) + "  EXEC    " +str(aux.proceso)+ " Dispatcher 104")
                        contador_intrucciones=aux.proceso2(n,contador_intrucciones,f1,aux.proceso,cola2)
                    else:
                        print("procesos no existe en cola ")
                else:
                    aux1 = aux1 + 1
Example #18
0
    tematicas.encolar(slist[2])

paginas = Cola()
for slist in data.items:
    paginas.encolar(slist[3])

editoriales = Cola()
for slist in data.items:
    editoriales.encolar(slist[4])

res = Cola()
while (not titulos.es_vacia()):
    #Primer orden por titulos
    tempMin = min(titulos.items)

    cTitulo = titulos.desencolar()
    cAutor = autores.desencolar()
    cTematica = tematicas.desencolar()
    cPagina = paginas.desencolar()
    cEditorial = editoriales.desencolar()

    if (cTitulo != tempMin):
        titulos.encolar(cTitulo)
        autores.encolar(cAutor)
        tematicas.encolar(cTematica)
        paginas.encolar(cPagina)
        editoriales.encolar(cEditorial)
    else:
        res.encolar([tempMin, cAutor, cTematica, cPagina, cEditorial])

#print(resR1.items)