/* ENLISTA LAS PÁGINAS PARA LUEGO PODER ENLAZARLAS. EN CADA PÁGINA SE METEN LOS DATOS DE SUS NODOS. */ private String Enlazar(Pagina Actual, String Grafo) { if (Actual == null || Actual.isEmpty()) { return(Grafo); } foreach (Pagina Auxiliar in Actual.Ramas) { Grafo = Enlazar(Auxiliar, Grafo); if (Auxiliar != null) { Grafo += "N" + Actual.Nodos[1].ID + " -> N" + Auxiliar.Nodos[1].ID; } } return(Grafo); }
/* CREA EL ARCHIVO '*.dot' ESCRIBIENDO EN EL LA LISTA DE NODOS Y LUEGO LOS ENLACES QUE TIENEN. */ private String Enlistar(Pagina Actual, String Grafo) { if (Actual == null || Actual.isEmpty()) { return(Grafo); } int Contador; Grafo += "N" + Actual.Nodos[1].ID + " [label=<\n"; Grafo += " <TABLE ALIGN = \"LEFT\">\n"; Grafo += " <TR>\n"; for (Contador = 1; Contador < 5; Contador++) { if (Contador <= Actual.Cuenta) { Grafo += " <TD>" + "ID = \"" + Actual.Nodos[Contador].ID + "\"<BR></BR>" + "IDActivo = \"" + Actual.Nodos[Contador].Activo + "\"<BR></BR>" + "Usuario = \"" + Actual.Nodos[Contador].Usuario + "\"<BR></BR>" + "Empresa = \"" + Actual.Nodos[Contador].Empresa + "\"<BR></BR>" + "Departamento = \"" + Actual.Nodos[Contador].Departamento + "\"<BR></BR>" + "Fecha = \"" + Actual.Nodos[Contador].Fecha + "\"<BR></BR>" + "Tiempo = \"" + Actual.Nodos[Contador].Tiempo + "\"" + " </TD>\n"; } else { Grafo += " <TD>" + " </TD>\n"; } } Grafo += " </TR>\n"; Grafo += " </TABLE>\n"; Grafo += ">, ];\n\t"; foreach (Pagina Auxiliar in Actual.Ramas) { Grafo = Enlistar(Auxiliar, Grafo); } return(Grafo); }
/* VERIFICA SI HAY QUE SUBIR UN NIVEL UN NODO, UTILIZANDO EL MÉTODO 'Empujar', Y LO HACE SI ES EL CASO. */ private void Empujar(ref Pagina Actual, Nodo Nuevo, ref Boolean HayQueSubir, ref Nodo Mediana, ref Pagina Nueva) { int Indice = 0; if (Actual == null || Actual.isEmpty()) { HayQueSubir = true; Mediana = Nuevo; Actual = null; Nueva = null; } else { Boolean Esta = BuscarNodo(ref Actual, Nuevo.ID, ref Indice); if (Esta) { Console.WriteLine("Dato duplicado."); HayQueSubir = false; Actual = null; return; } Empujar(ref Actual.Ramas[Indice], Nuevo, ref HayQueSubir, ref Mediana, ref Nueva); if (HayQueSubir) { if (Actual.isFull()) { Pagina Auxiliar = new Pagina(); DividirNodo(ref Actual, Mediana, ref Nueva, Indice, ref Mediana, ref Auxiliar); } else { HayQueSubir = false; InsertarEnHoja(ref Actual, Mediana, Nueva, Indice); } } } }
/* SE COMBINAN DOS PÁGINAS DE LA PÁGINA 'Padre' LOCALIZADAS EN LA POSICIÓN 'Indice - 1' E 'Indice'. SE ALINEAN LOS NODOS * Y LAS PÁGINAS QUE TIENE DE HIJOS LOS NODOS MOVIDOS, ESTO SE DEBE A QUE ANTES SE BAJA DEL PADRE EL NODO EN LA POSICION * 'Indice', QUE ES LA CLAVE MEDIA. */ public void Graficar() { if (Raiz == null || Raiz.isEmpty()) { return; } String Grafo = "digraph ArbolB{\n\trankdir = UD;\n\tgraph [ratio = fill];\n\tnode [shape = plaintext]\n\t"; Grafo = Enlistar(Raiz, Grafo); Grafo += "\n\n\t"; Grafo = Enlazar(Raiz, Grafo); Grafo += "\n}"; String Path = @"C:\Salidas"; if (!Directory.Exists(Path)) { Directory.CreateDirectory(Path); } Path = System.IO.Path.Combine(Path, "ArbolB.dot"); StreamWriter Archivo = new StreamWriter(Path, false); Archivo.WriteLine(Grafo); Archivo.Close(); }