voilà le code qui marche presque (l'organigramme a un peu changé)
la méthode 'place' refuse simplement que l'on mette la pièce 3 à l'emplacement 2 (pour l'instant), et la 15 en 14.
J'ai bien galéré car j'ai tardé à mettre l'étiquette 'titi', je la croyais inutile. Est-ce parce que continue se trouve dans une boucle for ?
Le 'continue' sans 'titi' est-il considéré comme 'continue la boucle for' ? Il semblerait.
Code:
package pac;
public class dh
{
public static void main(String[] args)
{
int [][] resol = new int [18][2]; // contient n° pièce et orientation
int min [] = {1,1,1,1,1,1,7,7,7,7,7,7,7,7,7,7,7,7};
int max [] = {6,6,6,6,6,6,18,18,18,18,18,18,18,18,18,18,18,18};
resol[0][0]=1; resol[0][1]=1;
int e = 0 ;
gen : while (e >= 0 && e < 18 )
{
resol[e][1] = matrice.place (e,resol[e][0],resol[e][1]);
if (resol[e][1]<9)
{
if (e==17) { System.out.println ("OK"); break;}
e++;
{resol[e][0] = min [e]; resol [e][1] = 0 ;
titi : while (true)
{
for (int j = (min [e]-1); j < e ; j++){if (resol[e][0] == resol[j][0]){ resol[e][0]++;continue titi;}}
break;
}
}
}
else
{
toto : while (true)
{resol[e][0]++;
if (resol[e][0]>max[e])
{
if (e == 0) {System.out.println ("impossible");break gen;}
e--; resol[e][1]++; break;
}
for (int j = min [e]-1; j < e; j++) {if (resol[e][0] == resol[j][0]) continue toto;}
break;
}
}
}
for (int d=0 ; d<18 ; d++) System.out.println ("empl "+d+" pièce "+resol[d][0]+" pos "+resol[d][1]);
}
}
donne en console
Code:
OK
empl 0 pièce 1 pos 1
empl 1 pièce 2 pos 1
empl 2 pièce 4 pos 1
empl 3 pièce 3 pos 1
empl 4 pièce 5 pos 1
empl 5 pièce 6 pos 1
empl 6 pièce 7 pos 1
empl 7 pièce 8 pos 1
empl 8 pièce 9 pos 1
empl 9 pièce 10 pos 1
empl 10 pièce 11 pos 1
empl 11 pièce 12 pos 1
empl 12 pièce 13 pos 1
empl 13 pièce 14 pos 1
empl 14 pièce 16 pos 1
empl 15 pièce 15 pos 1
empl 16 pièce 17 pos 1
empl 17 pièce 18 pos 1
Qu'en pensez-vous ?
nb : c'est la classe matrice qui s'occupe maintenant de tourner la pièce jusqu'à pouvoir la placer. Ou non.