コード例 #1
0
ファイル: ArbolStar.cs プロジェクト: MarlonRoches/Bstar
        public void PrimeraSeparacion(NodoStar Actual, Bebida Nuevo)
        {
            var lista = new List <Bebida>();

            foreach (var item in Actual.Datos)
            {
                lista.Add(item);
            }
            lista.Add(Nuevo);

            // escribir en el archivo todos los nodos disponibles del padre e hijos
            var hijo1 = new NodoStar(Grado, true)
            {
                Grado = Grado
            };

            hijo1.id = IdPAdre;
            var indice = 0;

            for (int i = 0; i < lista.Count / 2; i++)
            {
                hijo1.Datos[indice] = lista[i];
                indice++;
            }


            indice = 0;
            var hijo2 = new NodoStar(Grado, true);

            hijo2.id = Siguiente;
            Siguiente++;
            for (int i = (lista.Count / 2) + 1; i < lista.Count; i++)
            {
                hijo2.Datos[indice] = lista[i];
                indice++;
            }
            var raiznueva = new NodoStar(Grado, false)
            {
                id = Siguiente
            };

            lista.Sort((x, y) => x.Nombre.CompareTo(y.Nombre));
            raiznueva.Datos[0] = lista[(lista.Count / 2) + 1];
            IdPAdre            = Siguiente;
            raiznueva.Hijos[0] = hijo1.id;
            raiznueva.Hijos[1] = hijo2.id;
            hijo1.Padre        = raiznueva.id;
            hijo2.Padre        = raiznueva.id;
            Siguiente++;
            SortDatos(raiznueva.Datos);
            SortDatos(hijo1.Datos);
            SortDatos(hijo2.Datos);

            var escritor = new StreamWriter(GlobalPath);

            //metadata
            escritor.WriteLine($"{(IdPAdre).ToString().PadLeft(3, '0')}" +
                               $"|{Grado.ToString().PadLeft(3, '0')}|{Siguiente.ToString().PadLeft(3, '0')}" +
                               $"|{LargoPadre.ToString().PadLeft(3, '0')}|{LargoHijo.ToString().PadLeft(3, '0')}|");
            // nodos
            escritor.WriteLine(hijo1.WriteNodo());
            escritor.WriteLine(hijo2.WriteNodo());
            escritor.WriteLine(raiznueva.WriteNodo());
            escritor.Close();
        }