fork download
  1. :- initialization(main).
  2.  
  3.  
  4. queens(N,Qs) :- bagof(X, between(1,N,X), Xs), place(Xs,[],Qs).
  5.  
  6. place(Xs,Qs,Res) :-
  7. Xs = [] -> Res = Qs
  8. ; select(Q,Xs,Ys), not_diag(Q,Qs,1), place(Ys,[Q|Qs],Res)
  9. .
  10.  
  11. not_diag(_, [] , _).
  12. not_diag(Q, [Qh|Qs], D) :-
  13. abs(Q - Qh) =\= D, D1 is D + 1, not_diag(Q,Qs,D1).
  14.  
  15.  
  16. % for gprolog 1.3.1
  17. between(M,N,X) :- X = M ; M < N -> M1 is M + 1, between(M1,N,X).
  18.  
  19. main :- findall(Qs, (queens(8,Qs), write(Qs), nl), _), halt.
Success #stdin #stdout 0.02s 68352KB
stdin
Standard input is empty
stdout
[4,2,7,3,6,8,5,1]
[5,2,4,7,3,8,6,1]
[3,5,2,8,6,4,7,1]
[3,6,4,2,8,5,7,1]
[5,7,1,3,8,6,4,2]
[4,6,8,3,1,7,5,2]
[3,6,8,1,4,7,5,2]
[5,3,8,4,7,1,6,2]
[5,7,4,1,3,8,6,2]
[4,1,5,8,6,3,7,2]
[3,6,4,1,8,5,7,2]
[4,7,5,3,1,6,8,2]
[6,4,2,8,5,7,1,3]
[6,4,7,1,8,2,5,3]
[1,7,4,6,8,2,5,3]
[6,8,2,4,1,7,5,3]
[6,2,7,1,4,8,5,3]
[4,7,1,8,5,2,6,3]
[5,8,4,1,7,2,6,3]
[4,8,1,5,7,2,6,3]
[2,7,5,8,1,4,6,3]
[1,7,5,8,2,4,6,3]
[2,5,7,4,1,8,6,3]
[4,2,7,5,1,8,6,3]
[5,7,1,4,2,8,6,3]
[6,4,1,5,8,2,7,3]
[5,1,4,6,8,2,7,3]
[5,2,6,1,7,4,8,3]
[6,3,7,2,8,5,1,4]
[2,7,3,6,8,5,1,4]
[7,3,1,6,8,5,2,4]
[5,1,8,6,3,7,2,4]
[1,5,8,6,3,7,2,4]
[3,6,8,1,5,7,2,4]
[6,3,1,7,5,8,2,4]
[7,5,3,1,6,8,2,4]
[7,3,8,2,5,1,6,4]
[5,3,1,7,2,8,6,4]
[2,5,7,1,3,8,6,4]
[3,6,2,5,8,1,7,4]
[6,1,5,2,8,3,7,4]
[8,3,1,6,2,5,7,4]
[2,8,6,1,3,5,7,4]
[5,7,2,6,3,1,8,4]
[3,6,2,7,5,1,8,4]
[6,2,7,1,3,5,8,4]
[3,7,2,8,6,4,1,5]
[6,3,7,2,4,8,1,5]
[4,2,7,3,6,8,1,5]
[7,1,3,8,6,4,2,5]
[1,6,8,3,7,4,2,5]
[3,8,4,7,1,6,2,5]
[6,3,7,4,1,8,2,5]
[7,4,2,8,6,1,3,5]
[4,6,8,2,7,1,3,5]
[2,6,1,7,4,8,3,5]
[2,4,6,8,3,1,7,5]
[3,6,8,2,4,1,7,5]
[6,3,1,8,4,2,7,5]
[8,4,1,3,6,2,7,5]
[4,8,1,3,6,2,7,5]
[2,6,8,3,1,4,7,5]
[7,2,6,3,1,4,8,5]
[3,6,2,7,1,4,8,5]
[4,7,3,8,2,5,1,6]
[4,8,5,3,1,7,2,6]
[3,5,8,4,1,7,2,6]
[4,2,8,5,7,1,3,6]
[5,7,2,4,8,1,3,6]
[7,4,2,5,8,1,3,6]
[8,2,4,1,7,5,3,6]
[7,2,4,1,8,5,3,6]
[5,1,8,4,2,7,3,6]
[4,1,5,8,2,7,3,6]
[5,2,8,1,4,7,3,6]
[3,7,2,8,5,1,4,6]
[3,1,7,5,8,2,4,6]
[8,2,5,3,1,7,4,6]
[3,5,2,8,1,7,4,6]
[3,5,7,1,4,2,8,6]
[5,2,4,6,8,3,1,7]
[6,3,5,8,1,4,2,7]
[5,8,4,1,3,6,2,7]
[4,2,5,8,6,1,3,7]
[4,6,1,5,2,8,3,7]
[6,3,1,8,5,2,4,7]
[5,3,1,6,8,2,4,7]
[4,2,8,6,1,3,5,7]
[6,3,5,7,1,4,2,8]
[6,4,7,1,3,5,2,8]
[4,7,5,2,6,1,3,8]
[5,7,2,6,3,1,4,8]