예제 #1
0
        public static void ZakonczZadanie(int numer)
        {
            Zadanie doUsuniecia = new Zadanie();

            foreach (Zadanie zad in zadania)
            {
                if (zad.numerZadania == numer)
                {
                    zad.czyZakonczone = true;
                    doUsuniecia       = zad;
                    break;
                }
            }
            zadania.Remove(doUsuniecia);

            foreach (Zadanie zadanie in zadania)
            {
                if (zadanie.poprzednieZadania.Contains(doUsuniecia))
                {
                    zadanie.poprzednieZadania.Remove(doUsuniecia);
                }
                if (zadanie.nastepneZadania.Contains(doUsuniecia))
                {
                    zadanie.nastepneZadania.Remove(doUsuniecia);
                }
            }
        }
예제 #2
0
        public static void Wczytaj(string plik)
        {
            string[] lines = System.IO.File.ReadAllLines(@"D:\Uczelnia\semestr_6\SzeregowanieZadan\zad02\Hu\" + plik);


            for (int i = 1; i <= Int32.Parse(lines[0]); i++)
            {
                Maszyna m = new Maszyna(i, new List <Zadanie>());
                ManagerMaszyn.maszyny.Add(m);
            }

            for (int i = 1; i < lines.Length; i += 2)
            {
                int numerZadania = Int32.Parse(lines[i]);

                Zadanie z = new Zadanie(numerZadania, 1, 0, new List <Zadanie>(), new List <Zadanie>(), false);
                ManagerZadan.zadania.Add(z);
            }



            int j = 0;

            for (int i = 2; i < lines.Length; i += 2)
            {
                List <string> zadaniaPoprzednie = new List <string>();
                foreach (string zad in lines[i].Split(' '))
                {
                    zadaniaPoprzednie.Add(zad);
                }

                foreach (string zad in zadaniaPoprzednie)
                {
                    if (int.TryParse(zad, out int a))
                    {
                        int b = Convert.ToInt32(zad);
                        ManagerZadan.zadania.ElementAt(j).poprzednieZadania.Add(ManagerZadan.zadania.ElementAt(b - 1));
                        ManagerZadan.zadania.ElementAt(b - 1).nastepneZadania.Add(ManagerZadan.zadania.ElementAt(j));
                    }
                }

                j++;
            }
        }
예제 #3
0
        public static void UstawianiePoziomow()
        {
            zadania.Reverse();

            foreach (Zadanie zadanie in zadania)
            {
                zadanie.poziom = 0;
            }


            for (int i = 0; i < zadania.Count(); i++)
            {
                Zadanie zad = zadania.ElementAt(i);
                if (StatusWDrzewie == "out-tree")
                {
                    zadania.Reverse();
                    if (zad.poprzednieZadania.Count() == 0)
                    {
                        zad.poziom = 1;
                    }
                    else
                    {
                        zad.poziom = zad.poprzednieZadania.ElementAt(0).poziom + 1;
                    }
                    zadania.Reverse();
                }
                else
                {
                    if (zad.nastepneZadania.Count() == 0)
                    {
                        zad.poziom = 1;
                    }
                    else
                    {
                        zad.poziom = zad.nastepneZadania.ElementAt(0).poziom + 1;
                    }
                }
            }
            zadania.Reverse();

            int maxLevel = 0;

            foreach (Zadanie zadanie in zadania)
            {
                if (zadanie.poziom > maxLevel)
                {
                    maxLevel = zadanie.poziom;
                }
            }

            int minCounter = 0;
            int maxCounter = 0;

            foreach (Zadanie zadanie in zadania)
            {
                if (zadanie.poziom == 1)
                {
                    minCounter++;
                }
                if (zadanie.poziom == maxLevel)
                {
                    maxCounter++;
                }
            }

            if (minCounter > maxCounter)
            {
                StatusWDrzewie = "out-tree";
            }
            if (minCounter < maxCounter)
            {
                StatusWDrzewie = "in-tree";
            }
        }
예제 #4
0
        public static void PrzygotowanieHarmonogramu()
        {
            int time = 0;

            if (ManagerZadan.StatusWDrzewie == "out-tree")
            {
                foreach (Zadanie zadanie in ManagerZadan.zadania)
                {
                    List <Zadanie> tymczasowa = new List <Zadanie>();
                    if (zadanie.poprzednieZadania.Count() != 0)
                    {
                        foreach (Zadanie poprzednie in zadanie.poprzednieZadania)
                        {
                            tymczasowa = zadanie.poprzednieZadania;
                            zadanie.nastepneZadania.Add(poprzednie);
                            poprzednie.poprzednieZadania.Add(zadanie);
                        }
                        zadanie.poprzednieZadania = new List <Zadanie>();
                    }
                    zadanie.nastepneZadania = tymczasowa;
                }

                ManagerZadan.UstawianiePoziomow();
            }



            while (!ManagerZadan.UkonczoneZadania(ManagerZadan.zadania, 0))
            {
                int            maxLevel = ManagerZadan.zadania.First().poziom;
                List <Zadanie> zadaniaBezPoprzednich = new List <Zadanie>();
                List <Zadanie> zadaniaDoWykonania    = new List <Zadanie>();

                foreach (Zadanie zadanie in ManagerZadan.zadania)
                {
                    if (zadanie.poprzednieZadania.Count() == 0 && zadanie.czyZakonczone == false)
                    {
                        zadaniaBezPoprzednich.Add(zadanie);
                    }
                }

                zadaniaBezPoprzednich.Sort(Porownaj);


                if (zadaniaBezPoprzednich.Count() <= maszyny.Count())
                {
                    zadaniaDoWykonania = zadaniaBezPoprzednich;
                    while (zadaniaDoWykonania.Count() < maszyny.Count())
                    {
                        zadaniaDoWykonania.Add(new Zadanie(0, 1, 0, new List <Zadanie>(), new List <Zadanie>(), false));
                    }
                }
                else
                {
                    for (int i = 0; i < maszyny.Count(); i++)
                    {
                        zadaniaDoWykonania.Insert(i, zadaniaBezPoprzednich.ElementAt(i));
                    }
                }

                for (int i = 0; i < zadaniaDoWykonania.Count(); i++)
                {
                    maszyny.ElementAt(i).ustawienieZadan.Add(zadaniaDoWykonania.ElementAt(i));

                    Zadanie zadanieDoWykonania = zadaniaDoWykonania.ElementAt(i);
                    ManagerZadan.ZakonczZadanie(zadanieDoWykonania.numerZadania);
                }
                time++;
            }

            if (ManagerZadan.StatusWDrzewie == "out-tree")
            {
                foreach (Maszyna m in maszyny)
                {
                    m.ustawienieZadan.Reverse();
                }
            }
        }
예제 #5
0
 public static int Porownaj(Zadanie zad1, Zadanie zad2)
 {
     return(zad2.poziom - zad1.poziom);
 }