Ejemplo n.º 1
0
        private NodoO ordenarNodo(NodoO nodo_base)
        {
            NodoO aux = nodo_base;

            while (aux.bottom != null)
            {
                aux = aux.bottom;
            }//ahora trabajo con el Node mas bajo
             //y me voy de regreso para arreglar
            while (aux.top != null)
            {
                if (aux.item.Z == 1)//si es un barco, ese se queda como el principal
                {
                    break;
                }
                else if (aux.item.Z == 2)
                {
                    break;
                }
                aux = aux.top;
            }//si al final no habia barco, por defecto el nivel de avion, luego el de satelite, si solo hay submarino ese queda
            aux.up            = nodo_base.up;
            nodo_base.up.down = aux;
            aux.izq           = nodo_base.izq;
            nodo_base.izq.der = aux;
            return(aux);
        }
Ejemplo n.º 2
0
        public bool insertar(Unidad item, int fila, string columna)
        {
            Node <NodoO> row = buscarRow(fila);
            Node <NodoO> col = buscarCol(columna);

            if (row == null)
            {
                addRow(fila);
                row = buscarRow(fila);//en teoria ya no deberia ser null en este punto
            }
            if (col == null)
            {
                addColumn(columna);
                col = buscarCol(columna);//en teoria ya no deberia ser null en este punto
            }
            NodoO aux = insertarEnColumna(col.item, col.item.down, item, fila, columna);

            insertarEnFila(row.item, row.item.der, aux);
            if (aux == null)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
Ejemplo n.º 3
0
 private NodoO insertarEnColumna(NodoO actual, NodoO down, Unidad item, int fila, string columna)
 {
     if (down == null)
     {
         actual.down    = new NodoO(item, fila, columna);
         actual.down.up = actual;
         return(actual.down);
     }
     else if (columna.CompareTo(down.columna) < 0)          //va arriba de down y abajo de actual
     {
         actual.down      = new NodoO(item, fila, columna); //actual apunta a nuevo
         actual.down.up   = actual;                         //nuevo apunta a actual
         actual.down.down = down;                           //nuevo apunta a down
         down.up          = actual.down;                    //down apunta a nuevo
         return(actual.down);
     }
     else if (columna.CompareTo(down.columna) > 0)
     {
         return(insertarEnColumna(down, down.down, item, fila, columna));
     }
     else
     {
         if (fila < down.fila)
         {
             actual.down      = new NodoO(item, fila, columna); //actual apunta a nuevo
             actual.down.up   = actual;                         //nuevo apunta a actual
             actual.down.down = down;                           //nuevo apunta a down
             down.up          = actual.down;                    //down apunta a nuevo
             return(actual.down);
         }
         else if (fila > down.fila)
         {
             return(insertarEnColumna(down, down.down, item, fila, columna));
         }
         else//codigo para insertar en diferente nivel
         {
             if (down.item.Z > item.Z)//si el que esta actualmente en el Node, va arriba del nuevo
             {
                 down.bottom     = new NodoO(item, fila, columna);
                 down.bottom.top = down;
                 return(ordenarNodo(down));
             }
             else if (down.item.Z < item.Z)//el que esta actualmente en el Node, va debajo del nuevo
             {
                 down.top        = new NodoO(item, fila, columna);
                 down.top.bottom = down;
                 return(ordenarNodo(down));
             }
             else
             {
                 return(null);
             }
         }
     }
 }
Ejemplo n.º 4
0
        private NodoO buscarZ(int z, NodoO raiz)
        {
            NodoO aux = raiz;

            while (aux.bottom != null)
            {
                aux = aux.bottom;
            }
            while (aux != null)
            {
                if (aux.item.Z == z)
                {
                    break;
                }
                aux = aux.top;
            }
            return(aux);
        }
Ejemplo n.º 5
0
 private void insertarEnFila(NodoO actual, NodoO siguiente, NodoO nuevo)
 {
     if (nuevo == null)
     {
         //significa que la unidad cayo en un espacio repetido, no hago nada
     }
     else if (siguiente == null)
     {
         actual.der = nuevo;
         nuevo.der  = actual;
     }
     else if (nuevo.fila < siguiente.fila) //va anterior de siguiente y siguiente de actual
     {
         actual.der    = nuevo;            //actual apunta a nuevo
         nuevo.izq     = actual;           //nuevo apunta a actual
         nuevo.der     = siguiente;        //nuevo apunta a down
         siguiente.der = nuevo;            //down apunta a nuevo
     }
     else if (nuevo.fila > siguiente.fila)
     {
         insertarEnFila(siguiente, siguiente.der, nuevo);
     }
     else
     {
         if (nuevo.columna.CompareTo(siguiente.columna) < 0)
         {
             actual.der    = nuevo;     //actual apunta a nuevo
             nuevo.izq     = actual;    //nuevo apunta a actual
             nuevo.der     = siguiente; //nuevo apunta a down
             siguiente.izq = nuevo;     //down apunta a nuevo
         }
         else if (nuevo.columna.CompareTo(siguiente.columna) > 0)
         {
             insertarEnFila(siguiente, siguiente.der, nuevo);
         }
         else
         {
         }
     }
 }
Ejemplo n.º 6
0
        private string codigoNodos(Node <NodoO> fila, int nivel = 1)
        {
            string       salida = "";
            Node <NodoO> aux    = fila;
            NodoO        actual;
            NodoO        actual_Z;

            while (aux != null)
            {
                actual  = aux.item;
                actual  = actual.der;//el primero es la raiz i ese no tiene nada
                salida += "{rank=same;\n";

                while (actual != null)
                {
                    actual_Z = buscarZ(nivel, actual); //este seria el nodo en el nivel que estoy buscando
                    if (actual_Z != null)              //si hay algo en ese nivel
                    {
                        Unidad coso = actual_Z.item;
                        salida += "orto" + actual_Z.fila + "_" + actual_Z.columna
                                  + "[label=\"" + coso.Tipo + "\nVida:" + coso.Hp + "\nMov:" + coso.Movimiento
                                  + "\nRango:" + coso.Alcance + "\";shape=box;height=.7;width=.7;fixedsize=true;fontsize=8];\n";
                        if (actual.izq.item == null)//apunta a la raiz que esta dentro de la fila, necesito usar a nodo raiz, no a nodo Z
                        {
                            salida += "row" + aux.key + "->orto" + actual_Z.fila + "_" + actual_Z.columna + "[dir=both;weight=0];\n";
                        }
                        if (actual.izq.item != null)                           //apunta a una unidad
                        {
                            NodoO companyero_izq = buscarZ(nivel, actual.izq); //busco a ver si tiene un compañero
                            if (companyero_izq != null)                        //el codigo no necesita que lo haga con actual Z o companyero, eso da igual
                            {
                                salida += "orto" + actual.izq.fila + "_" + actual.izq.columna + "->orto" + actual.fila + "_" + actual.columna + "[dir=both;weight=0];\n";
                            }
                        }
                    }
                    actual = actual.der;
                }
                salida += "}\n";
                actual  = aux.item;
                actual  = actual.der;                  //el primero es la raiz y ese no tiene nada
                while (actual != null)                 //columnas
                {
                    actual_Z = buscarZ(nivel, actual); //para terminar, con las columnas
                    if (actual_Z != null)
                    {
                        Unidad coso = actual_Z.item;
                        if (actual.up.item != null)
                        {
                            NodoO companyero_izq = buscarZ(nivel, actual.up);//busco a ver si tiene un compañero
                            salida += "orto" + actual.up.fila + "_" + actual.up.columna + "->orto" + actual.fila + "_" + actual.columna + "[dir=both];\n";
                        }
                        else// (actual.up.item == null)
                        {
                            salida += "col" + actual.columna + "->orto" + actual.fila + "_" + actual.columna + "[dir=both];\n";
                        }
                    }
                    actual = actual.der;
                }
                salida += "\n";
                aux     = aux.siguiente;
            }
            return(salida);
        }