%% ======================================================== %% Auteur: Jean-Michel Richer %% email: jean-michel.richer@univ-angers.fr %% ======================================================== %% %% Problème des N-reines : %% %% Etant donné échiquier de NxN cases et N reines, trouver %% un positionnement des reines de manière à ce qu'il n'y %% ait aucune reine en prise avec une autre reine. %% %% ======================================================== include "globals.mzn"; %% -------------------------- %% Variables %% -------------------------- % number of queens int: N = 8; % columns where each queen is placed array[1..N] of var 1..N: queens; %% -------------------------- %% Constraints %% -------------------------- constraint alldifferent(queens); constraint alldifferent([ queens[i] + i | i in 1..N]); % distinct diagonals constraint alldifferent([ queens[i] - i | i in 1..N]); % upwards+downwards %% -------------------------- %% Search %% -------------------------- solve satisfy; %% -------------------------- %% Result %% -------------------------- output [ if fix(queens[j]) == i then "Q" else "." endif ++ if j == N then "\n" else "" endif | i,j in 1..N]