public Plecak Szukaj(Plecak aktualne, List <Pudelko> pudelka) { bool aktualizacja; RozwiazanieLosowe(aktualne, pudelka); while (true) { // flaga mówiąca czy dokonano aktualizacji maksimum aktualizacja = false; // pętla dla wszystkich rozwiązań sąsiednich foreach (Plecak sasiedni in RozwiazaniaSasiednie(aktualne, pudelka)) { if (aktualne.AktualnaWartosc < sasiedni.AktualnaWartosc) { aktualne = sasiedni; aktualizacja = true; } } // przerwij pętlę jeżeli nie było aktualizacji maksimum if (!aktualizacja) { break; } } // zwróć wynik return(aktualne); }
public static void Main(string[] args) { List <Pudelko> pudelka; Algorytm algorytm; Plecak plecak; pudelka = new List <Pudelko>() { new Pudelko(12, 4), // 12 kg, 4 zł new Pudelko(2, 2), // 2 kg, 2 zł new Pudelko(1, 2), // 1 kg, 2 zł new Pudelko(1, 1), // 1 kg, 1 zł new Pudelko(4, 10), // 4 kg, 10 zł }; algorytm = new Algorytm(); plecak = new Plecak(15); plecak = algorytm.Szukaj(plecak, pudelka); Console.WriteLine("Obciążenie plecaka: {0}/{1} kg", plecak.AktualneObciazenie, plecak.MaksymalneObciazenie); Console.WriteLine("Wartość plecaka: {0} zł", plecak.AktualnaWartosc); Console.WriteLine("Pudełka w plecaku => "); foreach (Pudelko pudelko in plecak.Pudelka) { Console.WriteLine("{0} kg, {1} zł", pudelko.Waga, pudelko.Wartosc); } Console.ReadKey(); }
public void RozwiazanieLosowe(Plecak plecak, List <Pudelko> pudelka) { int i, j, k; Random random; Pudelko t; random = new Random(); for (i = 0; i < pudelka.Count; i++) { j = random.Next(pudelka.Count); k = random.Next(pudelka.Count); t = pudelka[j]; pudelka[j] = pudelka[k]; pudelka[k] = t; } for (i = 0; i < pudelka.Count; i++) { plecak.SprobujDodac(pudelka[i]); } }
public List <Plecak> RozwiazaniaSasiednie(Plecak plecak, List <Pudelko> pudelka) { List <Plecak> rozwiazania; Plecak rozwiazanie; int i, j; rozwiazania = new List <Plecak>(); for (i = 0; i < plecak.Pudelka.Count; i++) { rozwiazanie = new Plecak(plecak); rozwiazanie.Pudelka.RemoveAt(i); for (j = 0; j < pudelka.Count; j++) { rozwiazanie.SprobujDodac(pudelka[j]); } rozwiazania.Add(rozwiazanie); } return(rozwiazania); }
public Plecak(Plecak plecak) { maksymalneObciazenie = plecak.maksymalneObciazenie; pudelka = new List <Pudelko>(); pudelka.AddRange(plecak.pudelka); }