def main(): a = Cola() for i in range(0, 10): a.encolar((int)(1 + random() * 20)) a.imprimir() a.desencolar() a.imprimir()
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
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
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
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
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)
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
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
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
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
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)
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)
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" )
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])
[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"
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
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)