Problème pour stocker une liste de combinaisons
Bonjour,
j'ai un projet à réaliser et dans celui-ci, je dois à un moment enregistrer les différentes combinaisons (k parmi n) dans une variable.
J'ai donc cherché un code pour faire ceci. J'ai utilisé ce code-ci : http://www.developpez.net/forums/d42...-combinaisons/ , qui affiche la bonne liste des combinaisons mais je souhaiterai stocker cette liste et non pas l'afficher directement.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| static int[] liste = new int[7];
static ArrayList<int[]> listefinale = new ArrayList<int[]>();
public static void partition(int index, int p, int n) { // construction recursive des listes possibles
if (index >=p ) {
// la liste est construite -> FIN
System.out.println(Arrays.toString(liste));
listefinale.add(liste);
return;
}
// ajoute un nouvel element candidat dans la liste
// - sans ordre -> candidat: tous les elements
// - avec ordre -> candidat: seulement les elements supérieurs au précédant
int start=0;
if (index>0) start=liste[index-1]+1;
for(int i=start;i<n;i++) {
liste[index]=i;
partition(index+1, p, n);
}
} |
Par exemple, pour 2 parmi 4, la liste affichée est bien
[0, 1, 0, 0, 0, 0, 0]
[0, 2, 0, 0, 0, 0, 0]
[0, 3, 0, 0, 0, 0, 0]
[1, 2, 0, 0, 0, 0, 0]
[1, 3, 0, 0, 0, 0, 0]
[2, 3, 0, 0, 0, 0, 0]
mais je n'arrive pas à la stocker !
Le programme fait ensuite un dernier parcours et met dans la liste (cela ne me gêne pas, je n'ai qu'à arrêter la boucle avant pour laisser [2, 3, 0, 0, 0, 0, 0]) :
[3, 3, 0, 0, 0, 0, 0]
En effet, le contenu de listefinale se remplace à chaque fois par la dernière liste, voici le contenu de listefinale à la fin :
[3, 3, 0, 0, 0, 0, 0]
[3, 3, 0, 0, 0, 0, 0]
[3, 3, 0, 0, 0, 0, 0]
[3, 3, 0, 0, 0, 0, 0]
[3, 3, 0, 0, 0, 0, 0]
[3, 3, 0, 0, 0, 0, 0]
Donc si je supprime la liste inutile ([3, 3, 0, 0, 0, 0, 0]), il m'affiche uniquement la dernière liste, les 5 premières sont aussi remplacés, ce que je ne veux pas :
[2, 3, 0, 0, 0, 0, 0]
[2, 3, 0, 0, 0, 0, 0]
[2, 3, 0, 0, 0, 0, 0]
[2, 3, 0, 0, 0, 0, 0]
[2, 3, 0, 0, 0, 0, 0]
[2, 3, 0, 0, 0, 0, 0]
Quelqu'un pourrait-il m'aider avec ce petit problème, ça fait quelques heures que je cherche en vain :(
Merci :)