Bonjour,
Quelle est la meilleure pratique pour retourner deux valeurs?
J'expose le problème :
Dans le cadre d'un projet pour le CNAM, je dois développer un solveur de sudoku. Seulement j'arrive à un point bloquant. Je génère une grille complète, puis une grille de sudoku (donc incomplète), je vérifie qu'elle est non ambiguë (càd n'admettant qu'une solution) et si tel est le cas, je l'affiche.
C'est là qu’apparaît mon problème : j'ai une grille finale plein et la grille à compléter. Existe-t-il une méthode propre, autre qu'un tableau, pour retourner les deux grilles, de façon à pouvoir proposer la grille et sa solution?
Pour illustrer, j'ai une méthode qui ressemble à peu près à ça:
A ce stade, je me pose une double question : celle du return (renvoyer un tableau avec grille_valide et solution) et celle de la structure même de ma méthode dans laquelle seule une deep_copy me permet de conserver une grille dans son état initial. J'ai l'impression que résoudre la question du return revient à résoudre celle de la deep_copy.if (solutionner(0, 0, 0, 0, matrice, 0, false, 1)) {
} else {
System.out.println("Aucune solution n'a été trouvée");
}
solution = deep_copy(matrice);
grille_sudoku = sudoku(matrice);
grille_valide = deep_copy(grille_sudoku);
if (solutionner(0, 0, 0, 0, grille_sudoku, 0, false, 2)) {
} else {
System.out.println("Aucune solution n'a été trouvée");
}
identique = compare(grille_sudoku, solution);
if (identique == true) {
matrix = grille_valide;
} else {
matrix = sudoker(matrix); //récursion
}
return (matrix);
PS: Si je résous deux fois la grille, c'est pour éliminer les grilles ambiguës. Une coup je résous en incrémentant depuis 1, un coup je résous en partant de 9. Ainsi, si les deux approches donnent le même résultat c'est qu'il n'y a qu'une solution possible.
PS 2: Cela me laisse l'impression floue d'un gros résidu d'approche procédurale de la programmation...
Partager