J'ai des problèmes pour essayer de résoudre le problème du sac à dos en utilisant le backtraking.Solution de sac à dos avec Backtraking en C++
Par exemple, pour les valeurs suivantes, la fonction Knapsack retourne 14 comme la solution, mais le résultat correct doit être 7.
int n = 3, weights[] = {2, 3, 1}, values[] = {6, 15, 7};
int solution = 0, max = 2;
void Knapsack (int i, int max, int value, int *solution)
{
int k;
for (k = i; k < n; k++) {
if (weights[k] <= max) {
Knapsack (k, max - weights[k], value + values[k], solution);
if (value+ values[k] > *solution)
*solution= value + values[k];
}
}
}
Quel est le problème ici?
Avez-vous essayé d'utiliser un problème vraiment minime (c'est-à-dire des 'valeurs plus petites []') et de faire défiler le code jusqu'à ce que vous voyiez que cela ne fonctionne pas? Sinon, mettez des lignes 'std :: cout << ...' dans votre boucle? –