Exemple #1
0
 public HojaB(int k)
 {
     this.k = k;
     Nodos  = new NodoB[k];
     for (int i = 0; i < k; i++)
     {
         Nodos[i] = null;
     }
     Padre = null;
 }
Exemple #2
0
        public void Insertar(NodoB nuevo)
        {
            int i = 0, j = 0;

            NodoB[] aux = new NodoB[k];
            while (i < k)
            {
                if (Nodos[j] != null)
                {
                    if (j < i)
                    {
                        aux[i] = Nodos[j];
                        j++;
                    }
                    else if (String.Compare(nuevo.Id, Nodos[j].Id) < 0)
                    {
                        aux[i] = nuevo;
                    }
                    else
                    {
                        aux[i] = Nodos[j];
                        j++;
                    }
                }
                else if (i == j)
                {
                    aux[i] = nuevo;
                }
                else
                {
                    aux[i] = null;
                }
                i++;
            }

            Nodos = aux;
        }
Exemple #3
0
        public void Insertar(int x, int y, String unidadAtacante, int resultado, String unidadDañada, String emisor, String receptor, String fecha, String tiempoRestante, int numero)
        {
            String id = "";

            switch (tipo)
            {
            case 1:
                //COORDENADA X
                id = x.ToString() + numero.ToString();
                break;

            case 2:
                //COORDENADA Y
                id = y.ToString() + numero.ToString();
                break;

            case 3:
                //UNIDAD ATACANTE
                id = unidadAtacante + numero.ToString();
                break;

            case 4:
                //RESULTADO
                id = resultado.ToString() + numero.ToString();
                break;

            case 5:
                //UNIDAD DAÑADA
                id = unidadDañada + numero.ToString();
                break;

            case 6:
                //EMISOR
                id = emisor + numero.ToString();
                break;

            case 7:
                //RECEPTOR
                id = receptor + numero.ToString();
                break;

            case 8:
                //FECHA
                id = fecha + numero.ToString();
                break;

            case 9:
                //TIEMPO
                id = tiempoRestante + numero.ToString();
                break;

            case 10:
                //NUMERO DE ATAQUE
                id = numero.ToString();
                break;
            }//fin del swtich

            CantidadAtaques++;

            NodoB nuevo = new NodoB(id, x, y, unidadAtacante, resultado, unidadDañada, emisor, receptor, fecha, tiempoRestante, CantidadAtaques);

            if (Raiz == null)
            {
                Raiz = new HojaB(K);
                Raiz.Insertar(nuevo);
            }
            else  //la Raiz no es nula
            {
                HojaB aux = encontrarHoja(Raiz, id);
                aux.Insertar(nuevo);
                romperHoja(aux);
            }
        }
Exemple #4
0
        private void romperHoja(HojaB aux)
        {
            if (aux.Nodos[k - 1] != null)
            {
                int   m   = k / 2;
                HojaB izq = new HojaB(k);
                HojaB der = new HojaB(k);
                int   j   = 0;
                for (int i = 0; i < m; i++)
                {
                    izq.Nodos[i] = aux.Nodos[j];
                    if (aux.Nodos[i].Derecha != null)
                    {
                        izq.Nodos[i].Derecha.Padre   = izq;
                        izq.Nodos[i].Izquierda.Padre = izq;
                    }
                    j++;
                }
                NodoB nuevo = aux.Nodos[j];
                j++;
                for (int i = 0; i < m; i++)
                {
                    der.Nodos[i] = aux.Nodos[j];
                    if (aux.Nodos[i].Derecha != null)
                    {
                        der.Nodos[i].Derecha.Padre   = der;
                        der.Nodos[i].Izquierda.Padre = der;
                    }
                    j++;
                }

                nuevo.Izquierda = izq;
                nuevo.Derecha   = der;
                if (aux == Raiz)
                {
                    Raiz          = new HojaB(k);
                    Raiz.Nodos[0] = nuevo;
                    izq.Padre     = Raiz;
                    der.Padre     = Raiz;
                }
                else
                {
                    izq.Padre = aux.Padre;
                    der.Padre = aux.Padre;

                    j = 0;
                    int     i = 0;
                    NodoB[] n = new NodoB[k];
                    while (i < k)
                    {
                        if (aux.Padre.Nodos[j] != null)
                        {
                            if (j < i)
                            {
                                n[i] = aux.Padre.Nodos[j];
                                j++;
                            }
                            else if (String.Compare(nuevo.Id, aux.Padre.Nodos[j].Id) < 0)
                            {
                                n[i] = nuevo;
                                aux.Padre.Nodos[j].Izquierda = nuevo.Derecha;
                                if (i > 0)
                                {
                                    n[i - 1].Derecha = nuevo.Izquierda;
                                }
                            }
                            else
                            {
                                n[i] = aux.Padre.Nodos[j];
                                j++;
                            }
                        }
                        else if (i == j)
                        {
                            n[i]             = nuevo;
                            n[i - 1].Derecha = nuevo.Izquierda;
                        }
                        else
                        {
                            n[i] = null;
                        }
                        i++;
                    }
                    aux.Padre.Nodos = n;

                    romperHoja(aux.Padre);
                }
            }
        }