/* N queens problem CLP form in Picat. "Traditional" CLP approach of N queens problem. This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ % import util. import cp. main => go. go ?=> N = 8, Map = get_global_map(), Map.put(count,0), Map.put(n,N), n_queens(N,Qs), println(Qs), Map.put(count,Map.get(count)+1), fail, nl. go => println(count=get_global_map().get(count)). go2 => N = 200, println(n=N), n_queens(N,Qs), println(Qs), nl. n_queens(N,Qs) => Qs = new_list(N), Qs :: 1..N, safe_queens(Qs), solve($[ff,split],Qs). safe_queens([]) => true. safe_queens([Q|Qs]) => safe_queens(Qs,Q,1), safe_queens(Qs). safe_queens([],_,_) => true. safe_queens([Q|Qs],Q0,D0) => Q0 #!= Q, abs(Q0 - Q) #!= D0, D1 #= D0 + 1, safe_queens(Qs,Q0,D1).