def BPA(origen, destino, grafo): raiz = Arbol(None, -1, origen) frontera = [raiz] visitados = [] while frontera: nodo = frontera.pop(0) if nodo.elemento == destino: print("Arbol generado") print(raiz) return nodo.rutaNodoRaiz() if not (nodo.elemento in visitados): for i in range(0, len(grafo[nodo.elemento])): if grafo[nodo.elemento][i] == 1: if not (i in visitados): raiz.agregar(nodo.elemento, nodo.nivel, i) frontera.append(Arbol(nodo, nodo.nivel, i)) visitados.append(nodo.elemento) return None
def BPP(origen, destino, grafo): raiz = Arbol(None,-1,origen)#Se crea el nodo de origen frontera = [raiz]#Se almacena los nodos ha ser desmenuzados jeje visitados = []#Este arrglo avita hacer visitas inecesarias si ya fue visitado anteriormente un nodo while frontera:# si frontera aun tiene hijos nodo = frontera.pop()#Sacamos siempre el de la frontera if nodo.elemento == destino:#Se regresa el arbol desmenuzado cuando se encontro el destino print("Arbol generado") print (raiz) return nodo.rutaNodoRaiz()#Se regresa la ruta segun el metodo del profe if not (nodo.elemento in visitados): for i in range(-len(grafo[nodo.elemento])+1,1):#Va a recorrer la fila del nodo en especifico(conexiones entre los demas nodos) if grafo[nodo.elemento][i*-1] == 1:#Va a checar las conexiones que tiene con otros nodos(vecinos) if not (i*-1 in visitados): raiz.agregar(nodo.elemento,nodo.nivel,i*-1)#Se va agregando un hijo al nodo padre(nodo donde si huboc enexion) frontera.append(Arbol(nodo,nodo.nivel,i*-1)) visitados.append(nodo.elemento) return None
def generaArbol(tablero, player): Tablero = tablero[:] antPlayer = player raiz = Arbol(None, -1, Tablero) frontera = [raiz] visitados = [] i = 1 while frontera: nodo = frontera.pop(0) nodoE = nodo.elemento if not (nodo.elemento in visitados): if (antPlayer is "O"): actualPlayer = "X" elif (antPlayer is "X"): actualPlayer = "O" for i in range(1, 10): auxTablero = copy.deepcopy(nodoE) movesCPU(auxTablero, actualPlayer, i) raiz.agregar(nodo.elemento, nodo.nivel, auxTablero) frontera.append(Arbol(nodo, nodo.nivel, auxTablero)) visitados.append(nodo.elemento) print(raiz) return None
def Laberinto(laberinto): posR = 0 posC = 0 #Se tiene que buscar las coordenadas de I y van a ir como tupla for fila in range(0, len(laberinto)): for columna in range(0, len(laberinto[fila])): if laberinto[fila][columna] == "I": posR = fila posC = columna origen = (posR, posC) raiz = Arbol(None, -1, origen) frontera = [raiz] visitados = [] while frontera: # si frontera aun tiene hijos nodo = frontera.pop(0) #Sacamos siempre el primero de la frontera posR, posC = nodo.elemento if laberinto[posR][ posC] == 'S': #Se regresa el arbol desmenuzado cuando se encontro el destino print("Arbol generado") print(raiz) return nodo.rutaNodoRaiz( ) #Se regresa la ruta segun el metodo del profe if not (nodo.elemento in visitados): try: if (laberinto[posR][posC - 1] != 'X'): #Izquierda elemento = (posR, posC - 1) raiz.agregar( nodo.elemento, nodo.nivel, elemento ) #Se va agregando un hijo al nodo padre(nodo donde si huboc enexion) frontera.append(Arbol(nodo, nodo.nivel, elemento)) except: pass try: if (laberinto[posR + 1][posC] != 'X'): #Abajo elemento = (posR + 1, posC) raiz.agregar( nodo.elemento, nodo.nivel, elemento ) #Se va agregando un hijo al nodo padre(nodo donde si huboc enexion) frontera.append(Arbol(nodo, nodo.nivel, elemento)) except: pass try: if (laberinto[posR][posC + 1] != 'X'): #derecha elemento = (posR, posC + 1) raiz.agregar( nodo.elemento, nodo.nivel, elemento ) #Se va agregando un hijo al nodo padre(nodo donde si huboc enexion) frontera.append(Arbol(nodo, nodo.nivel, elemento)) except: pass try: if (laberinto[posR - 1][posC] != 'X'): #Arriba elemento = (posR - 1, posC) raiz.agregar( nodo.elemento, nodo.nivel, elemento ) #Se va agregando un hijo al nodo padre(nodo donde si huboc enexion) frontera.append(Arbol(nodo, nodo.nivel, elemento)) except: pass visitados.append(nodo.elemento) return None
def PUZZLE(origen, destino): posR = 0 posC = 0 for fila in range(0, len(origen)): for columna in range(0, len(origen[fila])): if origen[fila][columna] == 0: posR = fila posC = columna heuri = heuristica(origen, destino) raiz = Arbol(None, -1, (origen, heuri, posR, posC)) frontera = [raiz] visitados = [] while frontera: menorHeuristica = 9999 menor = -1 for i in range(len(frontera)): nodo = frontera[i] nodoHeuristica = nodo.elemento[1] if nodoHeuristica < menorHeuristica: menorHeuristica = nodoHeuristica menor = i nodo = frontera.pop(menor) nodoE, nodoH, posR, posC = nodo.elemento if nodoE == destino and nodoH == 0: print("Arbol generado") print(raiz) return nodo.rutaNodoRaiz() if not (nodo.elemento in visitados): try: if (nodoE[posR][posC - 1] != 0): #Izquierda sinVisitar = copy.deepcopy(nodoE) varAux = sinVisitar[posR][posC - 1] sinVisitar[posR][posC - 1] = 0 sinVisitar[posR][posC] = varAux nodoEHeuristica = heuristica(sinVisitar, destino) elemento = (sinVisitar, nodoEHeuristica, posR, posC - 1) raiz.agregar( nodo.elemento, nodo.nivel, elemento ) #Se va agregando un hijo al nodo padre(nodo donde si huboc enexion) frontera.append(Arbol(nodo, nodo.nivel, elemento)) except: pass try: if (nodoE[posR + 1][posC] != 0): #Abajo sinVisitar = copy.deepcopy(nodoE) varAux = sinVisitar[posR + 1][posC] sinVisitar[posR + 1][posC] = 0 sinVisitar[posR][posC] = varAux nodoEHeuristica = heuristica(sinVisitar, destino) elemento = (sinVisitar, nodoEHeuristica, posR + 1, posC) raiz.agregar( nodo.elemento, nodo.nivel, elemento ) #Se va agregando un hijo al nodo padre(nodo donde si huboc enexion) frontera.append(Arbol(nodo, nodo.nivel, elemento)) except: pass try: if (nodoE[posR][posC + 1] != 0): #derecha sinVisitar = copy.deepcopy(nodoE) varAux = sinVisitar[posR][posC + 1] sinVisitar[posR][posC + 1] = 0 sinVisitar[posR][posC] = varAux nodoEHeuristica = heuristica(sinVisitar, destino) elemento = (sinVisitar, nodoEHeuristica, posR, posC + 1) raiz.agregar( nodo.elemento, nodo.nivel, elemento ) #Se va agregando un hijo al nodo padre(nodo donde si huboc enexion) frontera.append(Arbol(nodo, nodo.nivel, elemento)) except: pass try: if (nodoE[posR - 1][posC] != 0): #Arriba sinVisitar = copy.deepcopy(nodoE) varAux = sinVisitar[posR - 1][posC] sinVisitar[posR - 1][posC] = 0 sinVisitar[posR][posC] = varAux nodoEHeuristica = heuristica(sinVisitar, destino) elemento = (sinVisitar, nodoEHeuristica, posR - 1, posC) raiz.agregar( nodo.elemento, nodo.nivel, elemento ) #Se va agregando un hijo al nodo padre(nodo donde si huboc enexion) frontera.append(Arbol(nodo, nodo.nivel, elemento)) except: pass visitados.append(nodo.elemento) return None
#!/usr/bin/python3 from Arbol import Arbol A1 = Arbol("1") A1.agregar("1","1.1") A1.agregar("1","1.2") A1.agregar("1","1.3") A1.agregar("1.1","1.1.1") A1.agregar("1.2","1.2.1") A1.agregar("1.2","1.2.2") A1.agregar("1.1.1","1.1.1.1") A1.agregar("1.1.1","1.1.1.2") A1.agregar("1.1.1","1.1.1.3") A1.agregar("1.2.1","1.2.1.1") A1.agregar("1.2.2","1.2.2.1") A1.agregar("1.2.2","1.2.2.2") print ("Arbol inicial") print (A1) flag = True while flag: print ("1) Agregar elemento") print ("2) Borrar elemento") print ("3) Imprimir sub-arbol") print ("4) Salir") opc = int(input("Eliga una opción: ")) if opc == 1: padre, elemento = input("Ingrese el padre y elemento: ").split() A1.agregar(padre,elemento) elif opc == 2: elemento = input("Ingrese el elemento para borrar: ") A1.borrarSubA(elemento) elif opc == 3: