Ejemplo n.º 1
0
 public Nodo(int fila, int columna, ref Unidad valor)
 {
     this.fila      = fila;
     this.columna   = columna;
     this.unidad    = valor;
     this.izquierda = null;
     this.derecha   = null;
     this.arriba    = null;
     this.abajo     = null;
     this.adelante  = null;
     this.atras     = null;
     // this.accEncabezado = null;
 }
Ejemplo n.º 2
0
        public void insertar(int fila, string columna, ref Unidad nuevaUnidad)
        {
            int        col            = Encoding.ASCII.GetBytes(columna)[0]; //conversion de stirng a entero en codigo ascii
            Nodo       nuevoNodo      = new Nodo(fila, col, ref nuevaUnidad);
            Encabezado encabezadoFila = ncbzdoFilas.buscarEncabezado(fila);

            if (encabezadoFila == null)
            {
                encabezadoFila = new Encabezado(fila);
                ncbzdoFilas.insertar(ref encabezadoFila);
                encabezadoFila.acceso = nuevoNodo;
            }
            else
            {                                                          /* El nuevo nodo pregunta si la columna  es menor a la que tiene acceso la fila
                                                                        * Esta Verificado que no importa que nivel se inserte al principio */
                if (nuevoNodo.columna < encabezadoFila.acceso.columna) //insercion al inicio
                {
                    nuevoNodo.derecha = encabezadoFila.acceso;
                    encabezadoFila.acceso.izquierda = nuevoNodo;
                    encabezadoFila.acceso           = nuevoNodo;
                }
                else
                {
                    /* Hay que preguntar si el nivel del nuevo Nodo existe en la Fila Obtenida
                     * Si retorna un Null hay que ubicarlo en los Niveles de la Fila
                     * si retorn distinto a Null hay que ubicarlo en las columnas del  Nodo ubicado*/
                    Nodo NodoEncontrado = existeNivel(ref encabezadoFila.acceso, nuevoNodo.unidad.nivel);
                    if (NodoEncontrado == null)                                 //hay que hubicarlo en los niveles de la Fila
                    {
                        if (nuevoNodo.columna == encabezadoFila.acceso.columna) //tengo que verificar si el nuevo tiene la misma columna
                        {
                            insertarEntreNiveles(ref encabezadoFila.acceso, ref nuevoNodo);
                            verificarEnlaceIzqDer(ref encabezadoFila.acceso, ref nuevoNodo);
                            if (nuevoNodo.unidad.nivel == 1) //si el nuevoNod en la misma columna tiene nivel 1 lo pongo como acceso
                            {
                                encabezadoFila.acceso = nuevoNodo;
                            }
                            else if (nuevoNodo.unidad.nivel != 1)
                            {
                                if (nuevoNodo.unidad.nivel < encabezadoFila.acceso.unidad.nivel)
                                {
                                    encabezadoFila.acceso = nuevoNodo;
                                }
                            }
                        }
                        else //significa el nivel no esxite y que las columnas no son las mismas
                        {
                            insertarEntreNiveles(ref encabezadoFila.acceso, ref nuevoNodo);
                            verificarEnlaceIzqDerNiveles(ref encabezadoFila.acceso, ref nuevoNodo);
                        }
                    }
                    // el nivel del nuevo nodo ya existe por lo tanto con lo retornado hay que hubicarlos entre sus columnas
                    // preguntando siempre si el nuevo columna tiene distita columna que el nodo Encontrado ya que es el acceso
                    else if (!existeNodoFila(ref NodoEncontrado, ref nuevoNodo))
                    {
                        if (nuevoNodo.columna < NodoEncontrado.columna) // insercion al inicio
                        {
                            int ladoNivel = verificarLadoNivel(ref encabezadoFila.acceso, ref nuevoNodo);
                            NodoEncontrado.izquierda = nuevoNodo;
                            nuevoNodo.derecha        = NodoEncontrado;

                            if (ladoNivel == 1)
                            {
                                encabezadoFila.acceso.adelante.atras = null; // borro el enlace que quedaba de por medio
                                encabezadoFila.acceso.adelante       = nuevoNodo;
                                nuevoNodo.atras = encabezadoFila.acceso;
                            }
                            else if (ladoNivel == 0)
                            {
                                encabezadoFila.acceso.atras.adelante = null; //borro elenlace que quedaba de por medio
                                encabezadoFila.acceso.atras          = nuevoNodo;
                                nuevoNodo.adelante = encabezadoFila.acceso;
                            }
                            if (nuevoNodo.unidad.nivel == 1)
                            {
                                encabezadoFila.acceso = nuevoNodo;
                            }
                        }
                        else
                        {
                            Nodo tmpNivel = NodoEncontrado;
                            while (tmpNivel.derecha != null)
                            {
                                if (nuevoNodo.columna < tmpNivel.derecha.columna) //insercion al medio
                                {
                                    nuevoNodo.derecha          = tmpNivel.derecha;
                                    tmpNivel.derecha.izquierda = nuevoNodo;
                                    nuevoNodo.izquierda        = tmpNivel;
                                    tmpNivel.derecha           = nuevoNodo;
                                    verificarEnlaceIzqDerNiveles(ref tmpNivel, ref nuevoNodo);
                                    break;
                                }
                                tmpNivel = tmpNivel.derecha;
                            }
                            if (tmpNivel.derecha == null)
                            {
                                tmpNivel.derecha    = nuevoNodo;
                                nuevoNodo.izquierda = tmpNivel;
                                verificarEnlaceIzqDerNiveles(ref tmpNivel, ref nuevoNodo);
                            }
                        }
                    }
                }
            }
/*----------------------------- COMIENZA EL ANALISIS EN LA INSERCION DE COLUMNAS --------------------------*/
            Encabezado encabezadoCol = ncbzdoColumnas.buscarEncabezado(col);

            if (encabezadoCol == null)
            {
                encabezadoCol = new Encabezado(col);
                ncbzdoColumnas.insertar(ref encabezadoCol);
                encabezadoCol.acceso = nuevoNodo;
            }
        }
Ejemplo n.º 3
0
        private void button1_Click(object sender, EventArgs e)
        {
            Matriz nuevo = new Matriz();
            Unidad u1    = new Unidad(0, 0);
            Unidad u2    = new Unidad(1, 1);
            Unidad u3    = new Unidad(1, 3);
            Unidad u4    = new Unidad(0, 0);
            Unidad u5    = new Unidad(2, 1);
            Unidad u6    = new Unidad(3, 1);
            Unidad u7    = new Unidad(2, 1);

            nuevo.insertar(1, "A", ref u1);
            nuevo.insertar(1, "B", ref u2);
            nuevo.insertar(1, "A", ref u3);
            nuevo.insertar(1, "B", ref u4);
            nuevo.insertar(1, "A", ref u5);
            nuevo.insertar(1, "B", ref u6);
            nuevo.insertar(1, "B", ref u7);

            //      nuevo.insertar(1, "B", ref u2);
            //nuevo.insertar(1, "B", ref u4);


            //Unidad u5 = new Unidad(0, 0);
            //Unidad u6 = new Unidad(1, 1);
            //Unidad u7 = new Unidad(2, 3);
            //Unidad u8 = new Unidad(3, 6);

            //nuevo.insertar(2, "A", ref u5);
            //nuevo.insertar(2, "A", ref u6);
            //nuevo.insertar(2, "A", ref u7);
            //nuevo.insertar(2, "D", ref u8);

            //Unidad u9 = new Unidad(0, 0);
            //Unidad u10 = new Unidad(1, 1);
            //Unidad u11 = new Unidad(2, 3);
            //Unidad u12 = new Unidad(3, 6);

            //nuevo.insertar(1, "A", ref u1);
            //nuevo.insertar(1, "A", ref u2);
            //nuevo.insertar(1, "A", ref u3);
            //nuevo.insertar(1, "A", ref u4);

            // Unidad u5 = new Unidad(0, 0);
            // Unidad u6 = new Unidad(1, 1);
            // Unidad u7 = new Unidad(2, 3);
            // Unidad u8 = new Unidad(3, 6);

            //// nuevo.insertar(1, "C", ref u5);
            //// nuevo.insertar(1, "C", ref u6);
            ////// nuevo.insertar(1, "C", ref u3);
            //// nuevo.insertar(1, "C", ref u8);


            //Unidad u9 = new Unidad(0, 0);
            //Unidad u10 = new Unidad(1, 1);
            //Unidad u11 = new Unidad(2, 3);
            //Unidad u12 = new Unidad(3, 6);

            //nuevo.insertar(1, "B", ref u9);
            //nuevo.insertar(1, "B", ref u12);
            //nuevo.insertar(1, "B", ref u10);
            //nuevo.insertar(1, "B", ref u11);
            //nuevo.insertar(1, "D", ref u12);



            //Unidad u1 = new Unidad(3, 6);
            //Unidad u2 = new Unidad(2, 5);
            //Unidad u3 = new Unidad(1, 2);
            //Unidad u4 = new Unidad(1,2);
            //Unidad u5 = new Unidad(1, 2);
            //Unidad u6 = new Unidad(0, 0);

            //Unidad u7 = new Unidad(1, 2);
            //Unidad u8 = new Unidad(1, 2);
            //Unidad u9 = new Unidad(1, 2);

            //nuevo.insertar(1, "A", ref u1);
            //nuevo.insertar(12, "D", ref u2);

            //nuevo.insertar(8, "E", ref u3);
            //nuevo.insertar(9, "E", ref u7);
            //nuevo.insertar(10, "E", ref u8);
            //nuevo.insertar(11, "E", ref u9);

            //nuevo.insertar(2, "F", ref u4);
            //nuevo.insertar(5, "G", ref u5);
            //nuevo.insertar(7, "V", ref u6);

            // Grafo g = new Grafo();
            // g.generarMatriz(nuevo, 1);
        }