Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 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);
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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("");
        }
Beispiel #7
0
        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");
        }
Beispiel #8
0
        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");
        }
Beispiel #9
0
        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");
        }
Beispiel #10
0
 //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);
 }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
 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);
 }
Beispiel #15
0
        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);
        }