(****** Problème des 8 dames ******) (* Le tableau de longueur 9 permet d'utiliser des indices de 1 à 8 *) let dame = make_vect 9 0;; let nbre_de_succes = ref 0;; (* Si on affiche avec un map_vect, on récupère un type int vect, incompatible avec l'action finale *) let affiche t = let a x = ( print_int x; print_string " ") in for k=1 to 8 do a t.(k) done; print_newline (); ;; (* La fonction possible n'a pas besoin des variables car dame a été enregistré dans une variable globale *) let possible k = let bon = (ref true) and num = ref 1 in while (!bon & !num < k) do bon:=(dame.(k) <> dame.(!num)) & (abs(dame.(k) - dame.(!num)) <> abs(k - !num)); incr num; done; !bon ;; let installe = let rec met k = if k=9 then ( affiche dame; incr nbre_de_succes ) else for p=1 to 8 do begin dame.(k)<-p; if possible k then met(k+1) else dame.(k)<-0; end; done; in met 1; print_string "Il y a eu "; print_int !nbre_de_succes; print_string " solutions."; print_newline (); ;;