Ejemplo n.º 1
0
 private void combinarHorarios(List <Horario>[] horarios, List <Horario> horariosIniciales, List <Grupo> grupos, Dictionary <string, int> indicesGrupos)
 {
     foreach (Horario horario in horariosIniciales)
     {
         int cred = horario.Creditos;
         if (horario.Count() < LIMITE_MATERIAS && cred < LIMITE_CREDITOS)
         {
             List <Horario> lista = new List <Horario>();
             for (int i = GetNextGroupIndex(indicesGrupos, horario); i < grupos.Count(); i++)
             {
                 Grupo grupo = grupos[i];
                 if (verificar(grupo, horario, indicesGrupos))
                 {
                     Horario horarT = Horario.ClonarHorario(horario);
                     horarT.Add(grupo);
                     horarT.Id      += i + ".";
                     horarT.Creditos = cred + grupo.Materia.Creditos;
                     int restr = grupo.Materia.Restriccion;
                     if (restr != int.MaxValue)
                     {
                         horarT.Restriccion[restr]++;
                     }
                     foreach (Clase c in grupo.Clases)
                     {
                         if (horarT.DiasOcupados[c.NumeroDia] == 0)
                         {
                             horarT.CantidadDiasOcupados++;
                             horarT.DiasOcupados[c.NumeroDia] = 1;
                         }
                     }
                     horarios[horarT.Count].Add(horarT);
                     lista.Add(horarT);
                 }
             }
             if (lista.Count != 0)
             {
                 combinarHorarios(horarios, lista, grupos, indicesGrupos);
             }
         }
     }
 }
Ejemplo n.º 2
0
        private List <Horario> horariosInicialesDeGrupos(List <Grupo> grupos)
        {
            List <Horario> horarios = new List <Horario>();

            for (int i = 0; i < grupos.Count(); i++)
            {
                Horario h = new Horario(i + "");
                h.Add(grupos[i]);
                foreach (Clase c in grupos[i].Clases)
                {
                    if (h.DiasOcupados[c.NumeroDia] == 0)
                    {
                        h.CantidadDiasOcupados++;
                        h.DiasOcupados[c.NumeroDia] = 1;
                    }
                }
                horarios.Add(h);
            }

            return(horarios);
        }
Ejemplo n.º 3
0
        public static Horario ClonarHorario(Horario toClone)
        {
            Horario cloned = new Horario();

            foreach (Grupo g in toClone)
            {
                cloned.Add(g);
            }
            cloned.Id                   = toClone.Id;
            cloned.Restriccion          = new int[4];
            cloned.DiasOcupados         = new int[7];
            cloned.CantidadDiasOcupados = toClone.CantidadDiasOcupados;
            for (int i = 0; i < toClone.Restriccion.Length && toClone.Restriccion[i] != 0; i++)
            {
                cloned.Restriccion[i] = toClone.Restriccion[i];
            }
            for (int i = 0; i < toClone.DiasOcupados.Length; i++)
            {
                cloned.DiasOcupados[i] = toClone.DiasOcupados[i];
            }
            return(cloned);
        }