public void crearArbol(NodoGeneral <int> raiz, List <int> Cusuario, List <int> Coponente, bool miTurno, int tope) { for (int i = 0; i < Cusuario.Count; i++) { //mi turno esta en false juega el usuario List <int> cartasRepetidas = fotocopia(Cusuario); int cartaSeleccionada = Cusuario[i]; cartasRepetidas.Remove(cartaSeleccionada); NodoGeneral <int> Nuevohijo = new NodoGeneral <int>(cartaSeleccionada); raiz.setHijos(Nuevohijo); // if(!miTurno && ((tope-cartaSeleccionada) < 0)) // { // Nuevohijo.perdioComputer=1; // } if (miTurno && ((tope - cartaSeleccionada) < 0)) { Nuevohijo.PerdioUsuario = 1; } // if(miTurno && ((tope-cartaSeleccionada) == 0)) // { // Nuevohijo.perdioComputer=1; // } if (!miTurno && ((tope - cartaSeleccionada) == 0)) { Nuevohijo.PerdioUsuario = 1; } else { crearArbol(Nuevohijo, Coponente, cartasRepetidas, !miTurno, (tope - cartaSeleccionada)); } } }
public void Creararbol(NodoGeneral <int> nodopadre, List <int> a, List <int> b, bool miTurno, int tope) { for (int i = 0; i < a.Count; i++) { List <int> AuxA = Juego.copiar(a); int cartaAJugar = a[i]; AuxA.Remove(cartaAJugar); NodoGeneral <int> Nuevohijo = new NodoGeneral <int>(cartaAJugar); nodopadre.setHijos(Nuevohijo); if (!miTurno && ((tope - cartaAJugar) < 0)) { Nuevohijo.Datsec = 1; } else { if ((tope - cartaAJugar) == 0) { Nuevohijo.Datsec = 1; } else if ((tope - cartaAJugar) > 0) { Creararbol(Nuevohijo, b, AuxA, !miTurno, (tope - cartaAJugar)); } } } }
public override void incializar(List <int> cartasPropias, List <int> cartasOponente, int limite) { NodoGeneral <int> raiz = new NodoGeneral <int>(0); this.naipesComputer = cartasPropias; this.naipesUsuario = cartasOponente; this.limite = limite; crearArbol(raiz, cartasOponente, cartasPropias, miTurno, limite); this.ArbolMiniMax.Raiz = raiz; Console.WriteLine(); }
public override void incializar(List <int> cartasPropias, List <int> cartasOponente, int limite) { NodoGeneral <int> root = new NodoGeneral <int>(-1); this.naipes = cartasPropias; this.naipesoponente = cartasOponente; this.limite = limite; Creararbol(root, cartasOponente, cartasPropias, false, limite); this.arbol.setRaiz(root); Console.WriteLine(); }
public void profundidad(int n, int profundidad) { //Este metodo permite realizar la consulta de los datos de los nodos que se encuentran entre dos niveles //si los parametros n=profundidad obtenemos los datos que se encuentran en un determinado nivel. Si los //decrementamos el nivel en uno obtenemos los datos en una determinada profundidad var cola = new Cola <NodoGeneral <T> >(); cola.encolar(this.getRaiz()); cola.encolar(null); //Encola null para marcar la finalizacion un nivel. int nivel = 1; //Cuando finaliza un nivel y comienza uno nuevo la variable nivel incrementa en 1. string datos = ""; while (!cola.esVacia()) { NodoGeneral <T> aux = cola.desencolar(); if (aux == null) { cola.encolar(null); nivel++; if (cola.tope() == aux) //Esta estructura condicional permite evitar un bucle infinito, ya que cuando desencolo un null encolo otro para finalizar un nivel { //Cuando consultamos con el metodo tope no estamos desencolando sino preguntando si el siguiente dato a desencolar sera nulo o no. Si cola.desencolar(); //este dato siguiente es nulo lo desencolo y no encolo nada. De esta forma evito que se encolen nulls infinitos. } } else { if (nivel >= n && nivel <= profundidad) //Si el nivel coincide con la profundidad, es decir nivel=n=profundidad agrega a mi variable "datos" el dato del nodo que { //se encuentra en dicha profundidad. Console.Write("[" + aux.getDato() + "]"); //Esta impresion elabora una candena con los datos de los nodos que se encuentran en la misma profundidad datos = datos + aux.getDato(); } if (!this.esHoja()) { foreach (var hijo in aux.getHijos()) { cola.encolar(hijo); } } } } }
public void setHijos(NodoGeneral <T> Hijo) { this.hijos.Add(Hijo); }
private ArbolGeneral(NodoGeneral <T> nodo) { this.raiz = nodo; }
public ArbolGeneral(T dato) { this.raiz = new NodoGeneral <T>(dato); }
public void setDatoRaiz(T dato) { NodoGeneral <T> aux = new NodoGeneral <T>(dato); this.raiz = aux; }
public void setHijos(NodoGeneral <T> hijos) { this.hijos.Add(hijos); }
public void setRaiz(NodoGeneral <T> NuevaRaiz) { this.raiz = NuevaRaiz; }