Les reines
Exercice · OCaml (option informatique), chapitre 11 — Récursivité et retour sur trace
Énoncé
Écrire n_reines n comptant le nombre de placements valides, et donner n_reines 4 et n_reines 8.
Corrigé
let n_reines n =
let rec compatible ligne reines distance =
match reines with
| [] -> true
| l :: reste ->
l <> ligne && l - ligne <> distance && ligne - l <> distance
&& compatible ligne reste (distance + 1)
in
let rec place col reines =
if col = n then 1
else begin
let total = ref 0 in
for ligne = 0 to n - 1 do
if compatible ligne reines 1 then
total := !total + place (col + 1) (ligne :: reines)
done;
!total
end
in
place 0 []
n_reines 4 , n_reines 8 . La fonction compatible vérifie, en remontant les colonnes (distance croissante), qu'aucune reine n'est sur la même ligne ni sur l'une des deux diagonales. L'élagage (on ne descend que si compatible) rend l'exploration praticable.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.