コード例 #1
0
 private void afficher_resultat()
 {
     //list_item[] param = liste_des_objets.ToArray();
     list_item[] param = new list_item[liste_des_objets.Count()];
     max_poids = Int32.Parse(Sac_a_dos.Text);
     if (max_poids > 24)
     {
         max_poids      = 24;
         Sac_a_dos.Text = "24";
     }
     for (int k = 0; k < liste_des_objets.Count(); k++)
     {
         param[k] = liste_des_objets[k];
     }
     if (liste_des_objets.Count() != 0)
     {
         type_result rs = knapsack(param, max_poids);
         if (rs.gain_max <= 0)
         {
             gain_maximal.Text = "0";
         }
         else
         {
             gain_maximal.Text = rs.gain_max.ToString();
         }
         Liste_objet_selectione.ItemsSource = rs.Lista;
         lst.ItemsSource = rs.matrixa;
     }
 }
コード例 #2
0
        public static type_result knapsack(list_item[] items, int max_poids)
        {
            type_result resultat = new type_result();

            int[,] matrix = new int[items.Length + 1, max_poids + 1];
            for (int itemIndex = 0; itemIndex <= items.Length; itemIndex++)
            {
                list_item currentItem = itemIndex == 0 ? null : items[itemIndex - 1];
                for (int currentCapacity = 0; currentCapacity <= max_poids; currentCapacity++)
                {
                    if (currentItem == null || currentCapacity == 0)
                    {
                        matrix[itemIndex, currentCapacity] = 0;
                    }
                    else if (currentItem.poids <= currentCapacity)
                    {
                        matrix[itemIndex, currentCapacity] = Math.Max(currentItem.gain + matrix[itemIndex - 1, currentCapacity - currentItem.poids], matrix[itemIndex - 1, currentCapacity]);
                    }
                    else
                    {
                        matrix[itemIndex, currentCapacity] = matrix[itemIndex - 1, currentCapacity];
                    }
                }
            }

            int res = matrix[items.Length, max_poids];

            resultat.gain_max = res;
            int w = max_poids;

            for (int i = items.Length; i > 0 && res > 0; i--)
            {
                if (res == matrix[i - 1, w])
                {
                    continue;
                }
                else
                {
                    resultat.Lista.Add(items[i - 1]);
                    res -= items[i - 1].gain;
                    w   -= items[i - 1].poids;
                }
            }

            for (int i = 0; i < items.Length + 1; i++)
            {
                resultat.matrixa.Add(new List <int>());
                for (int j = 0; j < max_poids + 1; j++)
                {
                    resultat.matrixa[i].Add(matrix[i, j]);
                }
            }
            return(resultat);
        }
コード例 #3
0
 private void Button_Click_1(object sender, RoutedEventArgs e)
 {
     if (liste_des_objets.Count() + 1 > 10)
     {
         MessageBox.Show("Vous ne pouvez pas ajoute un autre objet , Désolé :) ");
     }
     else
     {
         list_item new_item = new list_item();
         nmbr_obj++;
         new_item.id    = nmbr_obj;
         new_item.objet = "Objet N° " + nmbr_obj.ToString();
         Random rnd = new Random();
         new_item.poids = rnd.Next(1, 6);
         new_item.gain  = rnd.Next(1, 20);
         liste_des_objets.Add(new_item);
         data_grid_objet.Items.Add(new_item);
     }
 }
コード例 #4
0
        private void addding_button_Click(object sender, RoutedEventArgs e)
        {
            if (liste_des_objets.Count() + 1 > 10)
            {
                MessageBox.Show("Vous ne pouvez pas ajoute un autre objet , Désolé :) ");
            }
            else
            {
                list_item new_item = new list_item();
                nmbr_obj++;
                new_item.id    = nmbr_obj;
                new_item.objet = "Objet N° " + nmbr_obj.ToString();

                new_item.poids = Int32.Parse(poids_in.Text);
                new_item.gain  = Int32.Parse(gain_in.Text);
                liste_des_objets.Add(new_item);
                data_grid_objet.Items.Add(new_item);
            }
            adding_stack.Visibility = Visibility.Collapsed;
            button_stack.Visibility = Visibility.Visible;
        }