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); } } }
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++; } }
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"; } }
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(); } } }
public static int Porownaj(Zadanie zad1, Zadanie zad2) { return(zad2.poziom - zad1.poziom); }