public int Distancia_Raiz(ArbolGeneral <Planeta> arbol) { if (arbol.getDatoRaiz().EsPlanetaDeLaIA()) { return(0); } else { int nivel = 1; List <ArbolGeneral <Planeta> > Lista_hijos = arbol.getHijos(); List <ArbolGeneral <Planeta> > Siguiente_nivel_hijos; do { //lista vacia que tendra los nodos por nivel Siguiente_nivel_hijos = new List <ArbolGeneral <Planeta> >(); foreach (ArbolGeneral <Planeta> Obtener_hijo in Lista_hijos) { //cuando encuentro un nodo que es ia retorno el nivel if (Obtener_hijo.getDatoRaiz().EsPlanetaDeLaIA()) { return(nivel); } //obtengo los hijos del nodo obtener hijos y lo agrego a la lista de nodos que tiene siguiente nivel foreach (ArbolGeneral <Planeta> hijo in Obtener_hijo.getHijos()) { Siguiente_nivel_hijos.Add(hijo); } } Lista_hijos = Siguiente_nivel_hijos; nivel++; } while (Siguiente_nivel_hijos.Count > 0); //-1 si no esta el dato return(-1); } }
public String Consulta3(ArbolGeneral <Planeta> arbol) { Cola <ArbolGeneral <Planeta> > q = new Cola <ArbolGeneral <Planeta> >(); q.encolar(arbol); int nivel = 0; String mensaje = ""; while (!q.esVacia()) { int elementos = q.cantElementos(); nivel++; int cantidad = 0; int total = 0; while (elementos-- > 0) { ArbolGeneral <Planeta> nodoActual = q.desencolar(); total = total + nodoActual.getDatoRaiz().Poblacion(); cantidad++; foreach (ArbolGeneral <Planeta> hijo in nodoActual.getHijos()) { q.encolar(hijo); } } double promedio = total / cantidad; mensaje += "\n" + "\n" + "\n" + "Nivel " + nivel + ": " + promedio + "\n"; } return(mensaje); }
public List <Planeta> CaminoPreOrden(ArbolGeneral <Planeta> arbol, List <Planeta> camino) { // Primero raiz camino.Add(arbol.getDatoRaiz()); // si encontramos camino if (arbol.getDatoRaiz().EsPlanetaDeLaIA()) { return(camino); } else { //hijos recursivo... foreach (var hijo in arbol.getHijos()) { List <Planeta> caminoAux = CaminoPreOrden(hijo, camino); if (caminoAux != null) { return(caminoAux); } //saco ultimo planeta del camino camino.Remove(hijo.getDatoRaiz()); } } return(null); }
public String Consulta2(ArbolGeneral <Planeta> arbol) { Cola <ArbolGeneral <Planeta> > q = new Cola <ArbolGeneral <Planeta> >(); q.encolar(arbol); int nivel = 0; String mensaje = ""; while (!q.esVacia()) { int elementos = q.cantElementos(); nivel++; int cantidadPorNivel = 0; while (elementos-- > 0) { ArbolGeneral <Planeta> nodoActual = q.desencolar(); if (nodoActual.getDatoRaiz().Poblacion() > 10) { cantidadPorNivel++; } foreach (ArbolGeneral <Planeta> hijo in nodoActual.getHijos()) { q.encolar(hijo); } } mensaje += "Nivel " + nivel + ": " + cantidadPorNivel + "\n"; } return(mensaje); }
public String Consulta3(ArbolGeneral <Planeta> arbol) //Recorrido por niveles { Cola <ArbolGeneral <Planeta> > q = new Cola <ArbolGeneral <Planeta> >(); q.encolar(arbol); int nivel = 0; String mensaje = ""; while (!q.esVacia()) { int elementos = q.cantElementos(); nivel++; int cantidadPorNivel = 0; int poblacionPorNivel = 0; while (elementos-- > 0) { ArbolGeneral <Planeta> nodoActual = q.desencolar(); cantidadPorNivel++; poblacionPorNivel += nodoActual.getDatoRaiz().Poblacion(); foreach (ArbolGeneral <Planeta> hijo in nodoActual.getHijos()) { q.encolar(hijo); } } mensaje += "Nivel " + nivel + ": " + poblacionPorNivel / cantidadPorNivel + "-----"; } return(mensaje); }
public String Consulta1(ArbolGeneral <Planeta> arbol) //Recorrido por niveles { Cola <ArbolGeneral <Planeta> > q = new Cola <ArbolGeneral <Planeta> >(); q.encolar(arbol); int nivel = 0; while (!q.esVacia()) { int elementos = q.cantElementos(); nivel++; while (elementos-- > 0) { ArbolGeneral <Planeta> nodoActual = q.desencolar(); if (nodoActual.getDatoRaiz().EsPlanetaDeLaIA()) { nivel--; string texto = nivel.ToString(); return("La distancia entre la raiz y el planeta del bot es de: " + texto); } foreach (ArbolGeneral <Planeta> hijo in nodoActual.getHijos()) { q.encolar(hijo); } } } return(""); }
public String Consulta3(ArbolGeneral <Planeta> arbol) { // calcular promedio poblacion por nivel de arbol (recorrido por niveles, sumar en total y cantidad y dividir por cantidad para sacar promedio) Cola <ArbolGeneral <Planeta> > c = new Cola <ArbolGeneral <Planeta> >(); uint Conta1 = 0; uint Conta2 = 0; uint Conta3 = 0; uint Conta4 = 0; uint nivel1 = 0; uint nivel2 = 0; uint nivel3 = 0; uint nivel4 = 0; c.encolar(arbol); while (!c.esVacia()) { arbol = c.desencolar(); int conta = arbol.nivel(arbol.getDatoRaiz()); if (conta == 1) { nivel1 += arbol.getDatoRaiz().population; Conta1++; } else if (conta == 2) { nivel2 += arbol.getDatoRaiz().population; Conta2++; } else if (conta == 3) { nivel3 += arbol.getDatoRaiz().population; Conta3++; } else { nivel4 += arbol.getDatoRaiz().population; Conta4++; } foreach (var hijo in arbol.getHijos()) { c.encolar(hijo); } } nivel1 /= Conta1; nivel2 /= Conta2; nivel3 /= Conta3; nivel4 /= Conta4; return($"\r\n\r\n\r\n\r\n\r\n\r\nPromedio de poblacion segun nivel:\r\n" + $"nivel 1: {nivel1}\r\n" + $"nivel 2: {nivel2}\r\n" + $"nivel 3: {nivel3}\r\n" + $"nivel 4: {nivel4}\r\n"); }
public String Consulta2(ArbolGeneral <Planeta> arbol) { Cola <ArbolGeneral <Planeta> > c = new Cola <ArbolGeneral <Planeta> >(); uint nivel1 = 0; uint nivel2 = 0; uint nivel3 = 0; uint nivel4 = 0; c.encolar(arbol); while (!c.esVacia()) { arbol = c.desencolar(); int conta = arbol.nivel(arbol.getDatoRaiz()); if (arbol.getDatoRaiz().population > 10) { if (conta == 1) { nivel1++; } else if (conta == 2) { nivel2++; } else if (conta == 3) { nivel3++; } else { nivel4++; } } foreach (var hijo in arbol.getHijos()) { c.encolar(hijo); } } //calcular cantidad de planetas con población > 10 en cada nivel del arbol (recorrido por niveles,con limitante de población) return($"\r\nCantidad de planetas con poblacion mayor a 10 segun nivel:\r\n" + $"nivel 1: {nivel1}\r\n" + $"nivel 2: {nivel2}\r\n" + $"nivel 3: {nivel3}\r\n" + $"nivel 4: {nivel4}\r\n"); }
public String Consulta2(ArbolGeneral <Planeta> arbol) { /*Calcula y retorna en un texto la cantidad de planetas que tienen * población mayor a 10 en cada nivel del árbol que es enviado como parámetro*/ string texto = ""; int cant_nodoNivel; int cant_PlanetaMayorA10; int nivel = 1; List <ArbolGeneral <Planeta> > Lista_hijos = arbol.getHijos(); List <ArbolGeneral <Planeta> > Siguiente_nivel_hijos; do { cant_nodoNivel = Lista_hijos.Count; cant_PlanetaMayorA10 = 0; //lista vacia que tendra los nodos por nivel Siguiente_nivel_hijos = new List <ArbolGeneral <Planeta> >(); foreach (ArbolGeneral <Planeta> Obtener_hijo in Lista_hijos) { if (Obtener_hijo.getDatoRaiz().Poblacion() > 10) { cant_PlanetaMayorA10++; } //obtengo los nodos hijos del nodo obtener_hijos y lo agrego a la lista de nodos que tiene siguiente nivel foreach (ArbolGeneral <Planeta> hijo in Obtener_hijo.getHijos()) { Siguiente_nivel_hijos.Add(hijo); } } //texto += "\nEl nivel " + nivel + " tiene : " + cant_PlanetaMayorA10 + " nodos con una población mayor a 10\n"; texto += "El nivel " + nivel + " tiene : " + cant_PlanetaMayorA10 + " nodos con una población mayor a 10\n"; Lista_hijos = Siguiente_nivel_hijos; nivel++; } while (Siguiente_nivel_hijos.Count > 0); return(texto + "\n"); }
//El metodo caminoRaizPlayer consigue un camino desde la raiz al primer planeta del bot private List <Planeta> caminoRaizPlayer(ArbolGeneral <Planeta> arbol, List <Planeta> camino) { camino.Add(arbol.getDatoRaiz()); //Agrego el planeta al camino if (arbol.getDatoRaiz().EsPlanetaDelJugador()) { //Si encuentro el planeta del jugdor retorno el camino return(camino); } else { foreach (ArbolGeneral <Planeta> hijo in arbol.getHijos()) { List <Planeta> caminoAux = this.caminoRaizPlayer(hijo, camino); if (caminoAux != null) //Si esta condicion es verdadera significa que el metodo encontro el planeta del jugador { return(caminoAux); } camino.RemoveAt(camino.Count - 1); //En caso de llegar a un camino equivocado elimino el ultimo elemento } } return(null); }
public List <Planeta> CaminoIAaRaiz(ArbolGeneral <Planeta> arbol, List <Planeta> caminoDeLaIA) { caminoDeLaIA.Add(arbol.getDatoRaiz()); if (arbol.getDatoRaiz().EsPlanetaDeLaIA()) { return(caminoDeLaIA); } else { foreach (var hijo in arbol.getHijos()) { List <Planeta> caminoAux = CaminoIAaRaiz(hijo, caminoDeLaIA); if (caminoAux != null) { return(caminoAux); } } caminoDeLaIA.RemoveAt(caminoDeLaIA.Count() - 1); } return(null); }
public String Consulta3(ArbolGeneral <Planeta> arbol) { /*Calcula y retorna en un texto el promedio poblacional por nivel del árbol que es enviado como parámetro. */ string texto = "\n"; int cant_nodoNivel; int cant_Poblacion; int nivel = 1; List <ArbolGeneral <Planeta> > Lista_hijos = arbol.getHijos(); List <ArbolGeneral <Planeta> > Siguiente_nivel_hijos; do { cant_nodoNivel = Lista_hijos.Count; cant_Poblacion = 0; //lista vacia que tendra los nodos por nivel Siguiente_nivel_hijos = new List <ArbolGeneral <Planeta> >(); foreach (ArbolGeneral <Planeta> Obtener_hijo in Lista_hijos) { cant_Poblacion += Obtener_hijo.getDatoRaiz().Poblacion(); //obtengo los hijos del nodo obtener hijos y lo agrego a la lista de nodos que tiene siguiente nivel foreach (ArbolGeneral <Planeta> hijo in Obtener_hijo.getHijos()) { Siguiente_nivel_hijos.Add(hijo); } } int promedio = 0; if (cant_nodoNivel > 0) { promedio = (cant_Poblacion / cant_nodoNivel); } texto += "\nEl nivel " + nivel + " tiene en promedio poblicional : " + promedio; //+ "\n"; texto += "\ncant. nodo " + cant_nodoNivel + " cant. poblacion total " + cant_Poblacion + "\n"; Lista_hijos = Siguiente_nivel_hijos; nivel++; } while (Siguiente_nivel_hijos.Count > 0); return(texto); }
public List <Planeta> CaminoRaizAHumano(ArbolGeneral <Planeta> arbol, List <Planeta> caminoDeRaizAHumano) { caminoDeRaizAHumano.Add(arbol.getDatoRaiz()); if (arbol.getDatoRaiz().EsPlanetaDelJugador()) { return(caminoDeRaizAHumano); } else { foreach (var hijo in arbol.getHijos()) { List <Planeta> caminoAux = CaminoRaizAHumano(hijo, caminoDeRaizAHumano); if (caminoAux != null) { return(caminoAux); } } caminoDeRaizAHumano.RemoveAt(caminoDeRaizAHumano.Count() - 1); } return(null); }
public List <Planeta> CaminoJugador(ArbolGeneral <Planeta> arbol, List <Planeta> camino) { // Primero raiz camino.Add(arbol.getDatoRaiz()); // si encontramos camino if (arbol.getDatoRaiz().EsPlanetaDelJugador()) { return(camino); } else { foreach (var hijo in arbol.getHijos()) { List <Planeta> CaminoKill = CaminoJugador(hijo, camino); if (CaminoKill != null) { return(CaminoKill); } camino.Remove(hijo.getDatoRaiz()); } } return(null); }
public ArrayList preordenCaminoJugador(ArrayList lista, ArbolGeneral <Planeta> arbol) { Planeta planeta = arbol.getDatoRaiz(); lista.Add(planeta); if (planeta.EsPlanetaDelJugador()) { return(lista); } else { foreach (ArbolGeneral <Planeta> i in arbol.getHijos()) { ArrayList lista2 = preordenCaminoJugador(lista, i); if (lista2 != null) { return(lista2); } lista.RemoveAt(lista.Count - 1); } } return(null); }