Ejemplo n.º 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);
            }
        }
Ejemplo n.º 2
0
 public int nivel(T dato)
 {
     if (getDatoRaiz().Equals(dato))
     {
         return(0);
     }
     else
     {
         //-1 si no esta el dato
         int nivel = 1;
         List <ArbolGeneral <T> > hijos = getHijos();
         List <ArbolGeneral <T> > Siguiente_nivel_hijos;
         do
         {
             Siguiente_nivel_hijos = new List <ArbolGeneral <T> >();
             foreach (ArbolGeneral <T> Obtener_hijo in hijos)
             {
                 if (Obtener_hijo.getDatoRaiz().Equals(dato))
                 {
                     return(nivel);
                 }
                 foreach (ArbolGeneral <T> hijo in Obtener_hijo.getHijos())
                 {
                     Siguiente_nivel_hijos.Add(hijo);
                 }
             }
             hijos = Siguiente_nivel_hijos;
             nivel++;
         } while (Siguiente_nivel_hijos.Count > 0);
         //-1 si no esta el dato
         return(-1);
     }
 }
Ejemplo n.º 3
0
        // Ejercicio 4 C  TP1
        public int ancho()
        {
            int ancho = 1;
            List <ArbolGeneral <T> > hijosdelArbol = Lista_de_hijos;
            List <ArbolGeneral <T> > Siguiente_nivel_hijos;

            do
            {
                if (ancho < hijosdelArbol.Count)
                {
                    ancho = hijosdelArbol.Count;
                }
                Siguiente_nivel_hijos = new List <ArbolGeneral <T> >();
                foreach (ArbolGeneral <T> Obtener_hijo in hijosdelArbol)
                {
                    foreach (ArbolGeneral <T> hijo in Obtener_hijo.getHijos())
                    {
                        Siguiente_nivel_hijos.Add(hijo);
                    }
                }
                hijosdelArbol = Siguiente_nivel_hijos;
            } while (Siguiente_nivel_hijos.Count > 0);



            return(ancho);
        }
Ejemplo n.º 4
0
        public Movimiento OpcionMover2ARaiz(ArbolGeneral <Planeta> arbol)
        {
            ArbolGeneral <Planeta> raiz = arbol;
            //suponemos que estan en la raiz cosa que al iniciar el do while va a cambiar
            ArbolGeneral <Planeta> nodoIA      = raiz;
            ArbolGeneral <Planeta> nodoUsuario = raiz;
            ArbolGeneral <Planeta> nodoPadreIA = raiz;

            int nivel = 1;
            List <ArbolGeneral <Planeta> > Lista_hijos = new List <ArbolGeneral <Planeta> >();

            Lista_hijos.Add(arbol);
            //arbol.getHijos();
            List <ArbolGeneral <Planeta> > Siguiente_nivel_hijos;

            do
            {
                ArbolGeneral <Planeta> nodopadre;
                //lista vacia que tendra los nodos por nivel
                Siguiente_nivel_hijos = new List <ArbolGeneral <Planeta> >();

                foreach (ArbolGeneral <Planeta> Obtener_hijo in Lista_hijos)
                {
                    nodopadre = Obtener_hijo;

                    //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())
                    {
                        if (hijo.getDatoRaiz().EsPlanetaDeLaIA())
                        {
                            nodoIA      = hijo;
                            nodoPadreIA = nodopadre;
                            break;
                        }
                        if (hijo.getDatoRaiz().EsPlanetaDelJugador())
                        {
                            nodoUsuario = hijo;
                        }
                        Siguiente_nivel_hijos.Add(hijo);
                    }
                }
                Lista_hijos = Siguiente_nivel_hijos;
                nivel++;
            } while (Siguiente_nivel_hijos.Count > 0);


            //Movimiento(Planeta origen, Planeta destino)
            Movimiento mover = new Movimiento(nodoIA.getDatoRaiz(), nodoPadreIA.getDatoRaiz());

            return(mover);
        }
Ejemplo n.º 5
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");
        }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
        public int Distancia_Nodo(ArbolGeneral <Planeta> arbol, ArbolGeneral <Planeta> ia, ArbolGeneral <Planeta> Usuario)
        {
            int nivel             = 0;
            int nivelIA           = -1;
            int nivelUsuario      = -1;
            int horizontal        = 0;
            int horizontalIA      = -1;
            int horizontalUsuario = -1;
            ArbolGeneral <Planeta>         raiz        = arbol;
            ArbolGeneral <Planeta>         nodoIA      = ia;
            ArbolGeneral <Planeta>         nodoUsuario = Usuario;
            List <ArbolGeneral <Planeta> > Lista_hijos = new List <ArbolGeneral <Planeta> >();

            Lista_hijos.Add(arbol);
            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
                    horizontal = 0;
                    //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);
                        horizontal++;
                        //if (hijo.getDatoRaiz().EsPlanetaDeLaIA())
                        if (hijo.getDatoRaiz().Equals(nodoIA))
                        {
                            // nodoIA = hijo;
                            nivelIA      = nivel;
                            horizontalIA = horizontal;
                        }
                        //if (hijo.getDatoRaiz().EsPlanetaDelJugador())
                        if (hijo.getDatoRaiz().Equals(nodoUsuario))
                        {
                            //nodoUsuario = hijo;
                            nivelUsuario      = nivel;
                            horizontalUsuario = horizontal;
                        }
                        Siguiente_nivel_hijos.Add(hijo);
                    }
                }
                Lista_hijos = Siguiente_nivel_hijos;
                nivel++;
            } while (Siguiente_nivel_hijos.Count > 0);

            int restahorizontal   = horizontalUsuario - horizontalIA;
            int diferenciaDenivel = -20;

            if (restahorizontal == 0)
            {
                diferenciaDenivel = nivelIA - nivelUsuario;
            }


            //si es -20 significa que estan en otro camino de nodo
            // si me da un numero positivo usuario esta arriba si me da negativo usuario esta abajo de

            return(diferenciaDenivel);
        }