1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
bool egalite_objet(objet o1, objet o2)
{
int cmp_nom = strcmp(o1->nom,o2->nom);
return o1->poids == o2->poids && cmp_nom == 0;
}
static int chercher_indice(sac s, objet o)
{
for(int i = 0; i<s->nb_objet; i++)
if(egalite_objet(s->listeObjet[i],o))
return i;
return -1;
}
void enlever_objet(sac s, objet o)
{
s->poids_courant -= o->poids;
s->nb_objet -= 1;
int i = chercher_indice(s,o);
(s->listeObjet[i]) = NULL;
}
void enlever_sac(containeurSac c, sac s)
{
c->nombre_sac -= 1;
(c->listeDeSac[c->nombre_sac-1]) = NULL;
}
void recursif(objet tab_objet[], containeurSac c, int i, int nb_sac_max, float POIDS_LIMITE)
{
for(int j =0; j < c->nombre_sac; j++)
{
if(ajout_possible_dans_sac(c->listeDeSac[j],tab_objet[i],POIDS_LIMITE))
{
ajouter_objet_dans_sac(c->listeDeSac[j], tab_objet[i]);
recursif(tab_objet, c, i+1, nb_sac_max, POIDS_LIMITE);
enlever_objet(c->listeDeSac[j], tab_objet[i]);
}
}
if(c->nombre_sac < nb_sac_max)
{
ajouter_sac_containeurSac(c);
recursif(tab_objet, c, i+1, nb_sac_max, POIDS_LIMITE);
enlever_objet(c->listeDeSac[i], tab_objet[i]);
enlever_sac(c, c->listeDeSac[c->nombre_sac-1]);
}
} |
Partager