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; } }
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); }
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); } }
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; }