示例#1
0
        Nodo ExistePunto(int x, int y)
        {
            Encabezado aux = eje_x.primero;

            if (aux == null)
            {
                return(null);
            }
            else
            {
                while (aux != null)
                {
                    Nodo actual = aux.acceso;
                    while (actual != null)
                    {
                        if ((x == actual.x) && (y == actual.y))
                        {
                            return(actual);
                        }
                        actual = actual.derecha;
                    }
                    aux = aux.siguiente;
                }
            }
            return(null);
        }
示例#2
0
 public Encabezado(int id)
 {
     this.id        = id;
     this.nivel0    = 0;
     this.nivel1    = 0;
     this.nivel2    = 0;
     this.nivel3    = 0;
     this.acceso    = null;
     this.siguiente = null;
     this.anterior  = null;
 }
示例#3
0
        public Encabezado getEncabezado(int id)
        {
            Encabezado aux = primero;

            while (aux != null)
            {
                if (aux.id == id)
                {
                    return(aux);
                }
                aux = aux.siguiente;
            }
            return(null);
        }
示例#4
0
 void CambiarConexiones(Nodo aux, Nodo nuevo)
 {
     //--------------  DERECHA  ----------------
     if (aux.derecha != null)
     {
         aux.derecha.izquierda = nuevo;
         nuevo.derecha         = aux.derecha;
         aux.derecha           = null;
     }
     //-------------  IZQUIERDA  ---------------
     if (aux.izquierda != null)
     {
         aux.izquierda.derecha = nuevo;
         nuevo.izquierda       = aux.izquierda;
         aux.izquierda         = null;
     }
     else
     { //es el acceso de un encabezado en x
         Encabezado encabezado_x = eje_x.getEncabezado(aux.x);
         encabezado_x.acceso = nuevo;
     }
     //---------------  ARRIBA  ----------------
     if (aux.arriba != null)
     {
         aux.arriba.abajo = nuevo;
         nuevo.arriba     = aux.arriba;
         aux.arriba       = null;
     }
     else
     { //es el acceso de un encabezado en y
         Encabezado encabezado_y = eje_y.getEncabezado(aux.y);
         encabezado_y.acceso = nuevo;
     }
     //---------------  ABAJO  -----------------
     if (aux.abajo != null)
     {
         aux.abajo.arriba = nuevo;
         nuevo.abajo      = aux.abajo;
         aux.abajo        = null;
     }
 }
示例#5
0
 public void Insertar(Encabezado nuevo)
 {
     if (primero == null)
     {
         primero = ultimo = nuevo;
     }
     else
     {
         if (nuevo.id < primero.id)//Inserción al inicio de la lista
         {
             primero.anterior = nuevo;
             nuevo.siguiente  = primero;
             primero          = nuevo;
         }
         else if (nuevo.id > ultimo.id)   //Inserción al final
         {
             ultimo.siguiente = nuevo;
             nuevo.anterior   = ultimo;
             ultimo           = nuevo;
         }
         else
         {
             Encabezado aux = primero;
             while (aux.siguiente != null)
             {
                 if (nuevo.id < aux.siguiente.id)
                 {
                     nuevo.siguiente        = aux.siguiente;
                     aux.siguiente.anterior = nuevo;
                     nuevo.anterior         = aux;
                     aux.siguiente          = nuevo;
                     break;
                 }
                 aux = aux.siguiente;
             }
         }
     }
 }
示例#6
0
        string GraficarBarcos()
        {
            StringBuilder b = new StringBuilder();

            //----------------    INICIO DE ESCRITURA    ---------------
            b.Append("digraph Barcos{" + Environment.NewLine);
            b.Append("   node[\n");
            b.Append("      fontname = \"Bitstream Vera Sans\"\n");
            b.Append("      fontsize = 8\n");
            b.Append("      fillcolor=seashell2\n");
            b.Append("      style = filled\n");
            b.Append("      shape = box\n");
            b.Append("   ];\n");
            b.Append("   edge[\n");
            b.Append("       fontname = \"Bitstream Vera Sans\"\n");
            b.Append("       fontsize = 10\n");
            b.Append("   ];\n");
            b.Append("rankdir=UD;\n" + Environment.NewLine);

            b.Append("{\n" + Environment.NewLine);
            b.Append("rank=min;\n" + Environment.NewLine);
            b.Append("m[label=\"matriz\"];\n" + Environment.NewLine);
            //---------------- LISTADO DE ENCABEZADOS DE Y---------------
            Encabezado encabezado_y = eje_y.primero;

            while (encabezado_y != null)
            {
                if (encabezado_y.nivel1 > 0)
                {   //Si existe un nivel 1 para ese encabezado entonces si se grafica
                    b.AppendFormat("nodey{0}[label=\"{1}\"];\n", getColumnName(encabezado_y.id), getColumnName(encabezado_y.id), Environment.NewLine);
                }
                encabezado_y = encabezado_y.siguiente;
            }
            b.Append("};\n" + Environment.NewLine);
            //------ LISTADO DE ENCABEZADOS DE X Y NODOS INTERNOS --------
            Encabezado encabezado_x = eje_x.primero;

            while (encabezado_x != null)
            {
                if (encabezado_x.nivel1 > 0)
                {  //Si existe un nivel 1 para el encabezado entonces si se grafica
                    b.Append("{\n" + Environment.NewLine);
                    b.Append("rank=same;\n" + Environment.NewLine);
                    b.AppendFormat("nodex{0}[label=\"{1}\"];\n", encabezado_x.id, encabezado_x.id, Environment.NewLine);
                    Nodo casilla = encabezado_x.acceso;

                    while (casilla != null)
                    {
                        if (casilla.z == 1)
                        {
                            b.AppendFormat("nodel{0}{1}[label=\"x:{2} y:{3} z:{4} \\l tipo:{5} \\l unidad:{6} \\l alcance:{7} \\l movimiento:{8} \\l daño:{9} \\l vida:{10}\"];\n",
                                           casilla.x, casilla.y, casilla.x, casilla.y, casilla.z, casilla.tipo, casilla.unidad, casilla.alcance, casilla.movimiento, casilla.damage, casilla.vida, Environment.NewLine);
                        }
                        casilla = casilla.derecha;
                    }
                    b.Append("}\n" + Environment.NewLine);
                }
                encabezado_x = encabezado_x.siguiente;
            }
            //-------------------- ENLACES INTERNOS DE Y -----------------
            Nodo first        = null;
            bool puedeEnlazar = false;

            Encabezado tempy = eje_y.primero;

            while (tempy != null)
            {
                if (tempy.nivel1 > 0)
                {
                    Nodo auxColum = tempy.acceso;
                    while (auxColum != null)
                    {
                        if (auxColum.z == 1)
                        {
                            if (puedeEnlazar == false)
                            {
                                first        = auxColum;
                                puedeEnlazar = true;
                            }
                            else
                            {
                                b.AppendFormat("nodel{0}{1}->nodel{2}{3}\n", first.x, first.y, auxColum.x, auxColum.y, Environment.NewLine);
                                b.AppendFormat("nodel{0}{1}->nodel{2}{3}\n", auxColum.x, auxColum.y, first.x, first.y, Environment.NewLine);
                                first = auxColum;
                            }
                        }
                        auxColum = auxColum.abajo;
                    }
                    first        = null;
                    puedeEnlazar = false;
                }
                tempy = tempy.siguiente;
            }
            //------------ UNIENDO CABECERAS DE Y CON ACCESO --------------
            Encabezado auxy = eje_y.primero;

            while (auxy != null)
            {
                if (auxy.nivel1 > 0)
                {
                    Nodo auxColumn = auxy.acceso;
                    while (auxColumn != null)
                    {
                        if (auxColumn.z == 1)
                        {
                            b.AppendFormat("nodey{0}->nodel{1}{2};\n", getColumnName(auxy.id), auxColumn.x, auxColumn.y, Environment.NewLine);
                            break;
                        }
                        auxColumn = auxColumn.abajo;
                    }
                }
                auxy = auxy.siguiente;
            }
            //------------------ ENLACES INTERNOS DE X --------------------
            first        = null;
            puedeEnlazar = false;

            Encabezado tempx = eje_x.primero;

            while (tempx != null)
            {
                if (tempx.nivel1 > 0)
                {
                    Nodo auxfil = tempx.acceso;
                    while (auxfil != null)
                    {
                        if (auxfil.z == 1)
                        {
                            if (puedeEnlazar == false)
                            {
                                first        = auxfil;
                                puedeEnlazar = true;
                            }
                            else
                            {
                                b.AppendFormat("nodel{0}{1}->nodel{2}{3}\n", first.x, first.y, auxfil.x, auxfil.y, Environment.NewLine);
                                b.AppendFormat("nodel{0}{1}->nodel{2}{3}\n", auxfil.x, auxfil.y, first.x, first.y, Environment.NewLine);
                                first = auxfil;
                            }
                        }
                        auxfil = auxfil.derecha;
                    }
                    first        = null;
                    puedeEnlazar = false;
                }
                tempx = tempx.siguiente;
            }
            //----------------- UNIENDO CABECERAS DE X CON ACCESO-----------
            Encabezado auxx = eje_x.primero;

            while (auxx != null)
            {
                if (auxx.nivel1 > 0)
                {
                    Nodo auxfil = auxx.acceso;
                    while (auxfil != null)
                    {
                        if (auxfil.z == 1)
                        {
                            b.AppendFormat("nodex{0}->nodel{1}{2};\n", auxx.id, auxfil.x, auxfil.y, Environment.NewLine);
                            break;
                        }
                        auxfil = auxfil.derecha;
                    }
                }
                auxx = auxx.siguiente;
            }
            //------------------------  ENCABEZADOS ------------------------
            Encabezado temporal_x = eje_x.primero;
            Encabezado temporal_y = eje_y.primero;

            b.Append("m");
            while (temporal_y != null)
            {
                if (temporal_y.nivel1 > 0)
                {
                    b.AppendFormat("->nodey{0}", getColumnName(temporal_y.id), Environment.NewLine);
                }
                temporal_y = temporal_y.siguiente;
            }
            b.Append(";\n");

            b.Append("m");
            while (temporal_x != null)
            {
                if (temporal_x.nivel1 > 0)
                {
                    b.AppendFormat("->nodex{0}", temporal_x.id);
                }
                temporal_x = temporal_x.siguiente;
            }
            b.Append(";\n");

            b.Append("}");
            return(b.ToString());
        }
示例#7
0
        void InsertarNuevo(Nodo nuevo)
        {  //
            //INSERCIÓN FILAS
            Encabezado encabezado_x = eje_x.getEncabezado(nuevo.x);

            if (encabezado_x == null)
            {  //Si no existe el encabezado hay que crearlo
                encabezado_x = new Encabezado(nuevo.x);
                this.eje_x.Insertar(encabezado_x);
                encabezado_x.acceso = nuevo;
                if (nuevo.z == 0)
                {
                    encabezado_x.nivel0++;
                }
                else if (nuevo.z == 1)
                {
                    encabezado_x.nivel1++;
                }
                else if (nuevo.z == 2)
                {
                    encabezado_x.nivel2++;
                }
                else if (nuevo.z == 3)
                {
                    encabezado_x.nivel3++;
                }
            }
            else if (encabezado_x.acceso == null)
            {  //No es necesario, pero ahí que quede
                encabezado_x.acceso = nuevo;
            }
            else
            {
                if (nuevo.y < encabezado_x.acceso.y)
                {  //Inserción al inicio
                    nuevo.derecha = encabezado_x.acceso;
                    encabezado_x.acceso.izquierda = nuevo;
                    encabezado_x.acceso           = nuevo;
                }
                else
                {
                    Nodo actual = encabezado_x.acceso;  //Inserción en el medio
                    while (actual.derecha != null)
                    {
                        if (nuevo.y < actual.derecha.y)
                        {
                            nuevo.derecha            = actual.derecha;
                            actual.derecha.izquierda = nuevo;
                            nuevo.izquierda          = actual;
                            actual.derecha           = nuevo;
                            break;
                        }
                        actual = actual.derecha;
                    }
                    if (actual.derecha == null)
                    {  //Inserción al final
                        actual.derecha  = nuevo;
                        nuevo.izquierda = actual;
                    }
                }

                if (nuevo.z == 0)
                {
                    encabezado_x.nivel0++;
                }
                else if (nuevo.z == 1)
                {
                    encabezado_x.nivel1++;
                }
                else if (nuevo.z == 2)
                {
                    encabezado_x.nivel2++;
                }
                else if (nuevo.z == 3)
                {
                    encabezado_x.nivel3++;
                }
            }
            //FIN DE LA INSERCIÓN DE FILAS

            //INSERCIÓN COLUMNAS
            Encabezado encabezado_y = eje_y.getEncabezado(nuevo.y);

            if (encabezado_y == null)      //Si no existe se crea un nuevo encabezado.
            {
                encabezado_y = new Encabezado(nuevo.y);
                this.eje_y.Insertar(encabezado_y);
                encabezado_y.acceso = nuevo;

                if (nuevo.z == 0)
                {
                    encabezado_y.nivel0++;
                }
                else if (nuevo.z == 1)
                {
                    encabezado_y.nivel1++;
                }
                else if (nuevo.z == 2)
                {
                    encabezado_y.nivel2++;
                }
                else if (nuevo.z == 3)
                {
                    encabezado_y.nivel3++;
                }
            }
            else if (encabezado_y.acceso == null)
            {  //No es necesario
                encabezado_y.acceso = nuevo;
            }
            else
            {
                if (nuevo.x < encabezado_y.acceso.x)
                {  //Inserción al inicio
                    nuevo.abajo = encabezado_y.acceso;
                    encabezado_y.acceso.arriba = nuevo;
                    encabezado_y.acceso        = nuevo;
                }
                else
                {
                    Nodo actual = encabezado_y.acceso;
                    while (actual.abajo != null)
                    {
                        if (nuevo.x < actual.abajo.x)
                        {
                            nuevo.abajo         = actual.abajo;
                            actual.abajo.arriba = nuevo;
                            nuevo.arriba        = actual;
                            actual.abajo        = nuevo;
                            break;
                        }
                        actual = actual.abajo;
                    }
                    if (actual.abajo == null)
                    {
                        actual.abajo = nuevo;
                        nuevo.arriba = actual;
                    }
                }

                if (nuevo.z == 0)
                {
                    encabezado_y.nivel0++;
                }
                else if (nuevo.z == 1)
                {
                    encabezado_y.nivel1++;
                }
                else if (nuevo.z == 2)
                {
                    encabezado_y.nivel2++;
                }
                else if (nuevo.z == 3)
                {
                    encabezado_y.nivel3++;
                }
            }
            //FIN DE INSERCIÓN COLUMNAS
        }
示例#8
0
 public ListaEncabezados()
 {
     primero = ultimo = null;
 }