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; }
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; } }
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); }