def __init__(self, nombre, capacidad): self.nombre = nombre self.lista_vecinos = Lista() self.distancia = None self.padre = None self.visto = False self.calculado = False self.capacidad = capacidad self.color = 'W'
def lista_vecinos(self): """ Retorna una lista de objetos tipo Puerto con los puertos adyacentes a self :return: Lista """ lista_vecinos = Lista() for lista in self.vecinos.values: for vecino in lista: if vecino not in lista_vecinos: lista_vecinos.append(vecino) return lista_vecinos
def backtrack(v): """ Algortimo recursivo para encontrar el camino desde v hasta 0 :param v: Objeto del tipo Nodo (o Puerto) :return: Objeto del tipo list, que es el camino ivertido mas corto desde el vertive v hasta el vertice 0 """ camino = Lista() camino.append(v) if v.padre: camino += backtrack(v.padre) return camino
class Nodo: def __init__(self, nombre, capacidad): self.nombre = nombre self.lista_vecinos = Lista() self.distancia = None self.padre = None self.visto = False self.calculado = False self.capacidad = capacidad self.color = 'W' def agregar_vecino(self, *nodos): for nodo in nodos: self.lista_vecinos.append(nodo) def __repr__(self): return '{0}'.format(self.nombre)
def find_path(G, s, t): def quedan_vecinos(v): for u in v.lista_vecinos: if u.color == 'W': return True return False for nodo in G: nodo.padre = None if nodo.color == 'G': nodo.color = 'W' s.color = 'G' stack = Lista() stack.append(s) while stack: u = stack.pop() for nodo in u.lista_vecinos: if nodo.color == 'W': nodo.color = 'G' nodo.padre = u stack.append(nodo) print(quedan_vecinos(nodo)) if not quedan_vecinos(nodo): nodo.color = 'B' return backtrack(t)
def obtener_conexiones(self): lista_conexiones = Lista() for m in self.puertos: for (u, vecino) in self.puertos[m].vecinos.items: if len(vecino) >= 3: for v in vecino: lista_conexiones.append(Tupla(m, v, 'RAND')) elif len(vecino) == 2: for v in vecino: lista_conexiones.append(Tupla(m, v, 'ALT')) elif len(vecino) == 1: for v in vecino: lista_conexiones.append(Tupla(m, v, '')) return lista_conexiones
def doble_sentido(G): for nodo in G: nodo.visto = False lista = Lista() def dfs(v): caminos = Lista() for nodo in G: nodo.padre = None stack = Lista() v.visto = True stack.append(v) while stack: u = stack.pop() for w in u.lista_vecinos: if not w.visto and conected(w, u): w.visto = True w.padre = u stack.append(w) camino = backtrack(u) if len(camino) > 1: caminos.append(backtrack(u)) return caminos for i in range(len(G)): if not G[i].visto: lista += dfs(G[i]) return lista
print("************************** Cierre de sistema **************************\n") global validacion validacion = False print("\nEl sistema se cierra, Adios :3\n") #------------------------------------------------ opcion invalidad else: print("************************ Bienvenido usuario ***********************************\n") print("Opcion no validad\n") os.system("pause") os.system("cls") """" ************************************************************************************************* """ """" *********************************Menu principal del sistems ************************************* """ validacion = True lista_usuarios = Lista() while validacion==True: os.system("cls") print("************************ Bienvenido usuario ***********************************\n") print("1. Crear usuario") print("2. Ingresar usuario") print("3. Salir del programa\n") print("Selecciona una opcion: ") opcion = input().strip() menu_principal(opcion) """" ************************************************************************************************* """
def dfs(v): caminos = Lista() for nodo in G: nodo.padre = None stack = Lista() v.visto = True stack.append(v) while stack: u = stack.pop() for w in u.lista_vecinos: if not w.visto and conected(w, u): w.visto = True w.padre = u stack.append(w) camino = backtrack(u) if len(camino) > 1: caminos.append(backtrack(u)) return caminos