Esempio n. 1
0
        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();
        }
Esempio n. 3
0
        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]);
            }
        }
Esempio n. 4
0
        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);
 }