Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
#!/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: