public void porNiveles() { Cola <ArbolGeneral <T> > cola = new Cola <ArbolGeneral <T> >(); cola.encolar(this); while (!cola.esVacia()) { ArbolGeneral <T> dato = cola.desencolar(); Console.WriteLine(dato.getDatoRaiz() + dato.estadoGana()); foreach (ArbolGeneral <T> x in dato.getHijos()) { cola.encolar(x); } } }
private void funcionEuristica(ArbolGeneral <int> arbolminmax, int limit, int turno) { // turno ira turnando al IA y al usuario. si turno es par, es turno de IA. impar para el usuario turno++; int dato = arbolminmax.getDatoRaiz(); limit = limit - dato; if (limit < 0) { if (turno % 2 == 0) { arbolminmax.sePierde(); } else { arbolminmax.seGana(); } } else { // si es turno de IA, entonces la funcion euristica minimiza, si es turno del usuario maximiza // por defecto si es turno de IA, se implementa que gana IA a menos que haya un solo resultado // negativo obtenido de la recursion, entonces se pone en el arbol que pierde (minimizar). // lo contrario con el turno del usuario. string decide = ""; if (turno % 2 == 0) { decide = "gana IA"; } else { decide = "pierde IA"; } foreach (ArbolGeneral <int> x in arbolminmax.getHijos()) { funcionEuristica(x, limit, turno); string ganador = x.estadoGana(); if (turno % 2 == 0) { if (ganador == "pierde IA") { decide = "pierde IA"; } } else { if (ganador == "gana IA") { decide = "gana IA"; } } } if (decide == "gana IA") { arbolminmax.seGana(); } else { arbolminmax.sePierde(); } } }