je voudrais résoudre un sudoku par la méthode de backtracking, en python et en C je n'ai aucun soucis mais je dois le faire en Ocaml et je viens de passer des heures sur une simple fonction que le compilateur ne veut toujours pas compiler, voici le code en C (tiré directement d'OpenClassroom) ainsi que mon code en OCaml juste en-dessous :
bool estValide (int grille[9][9], int position)
{
// Si on est à la 82e case (on sort du tableau)
if (position == 9*9)
return true;
// On récupère les coordonnées de la case
int i = position/9, j = position%9;
// Si la case n'est pas vide, on passe à la suivante (appel récursif)
if (grille[i][j] != 0)
return estValide(grille, position+1);
// A implémenter : backtracking
}
en OCaml:
let rec est_valide sudok pos =
try
if pos = 81 then raise Exit;
let i = pos / 9
and j = pos mod 9 in
if sudok.(i).(j) <> 0 then est_valide sudok (pos + 1)
false
with
Exit -> true ;;
J'imagine que c'est pas compliqué mais je comprends plus rien, j'ai essayé de mettre des ';' un peu partout, mais je pense que c'est la deuxième boucle if qui empêche le compilateur de compiler.
Oui, tu t'es bien pris la tête Pas besoin d'exceptions ici :
let rec est_valide sudok pos =
if pos = 81 then true
else
let i = pos / 9 in
let j = pos mod 9 in
if sudok.(i).(j) <> 0 then
est_valide sudok (pos + 1)
else
false (* backtracking ici *)
;;
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mon portfolio photo : https://www.instagram.com/charlievanaret_photo/