29 lines
494 B
Prolog
29 lines
494 B
Prolog
solution(Queens) :-
|
|
permutation([1,2,3,4,5,6,7,8], Queens),
|
|
safe(Queens).
|
|
|
|
permutation([],[]).
|
|
|
|
permutation([Head|Tail],PermList) :-
|
|
permutation(Tail,PermTail),
|
|
del(Head,PermList,PermTail).
|
|
|
|
del(Item,[Item|List],List).
|
|
|
|
del(Item,[First|List],[First|List1]) :-
|
|
del(Item,List,List1).
|
|
|
|
safe([]).
|
|
|
|
safe([Queen|Others]) :-
|
|
safe(Others),
|
|
noattack(Queen,Others,1).
|
|
|
|
noattack(_,[],_).
|
|
|
|
noattack(Y,[Y1|Ylist],Xdist) :-
|
|
Y1-Y=\=Xdist,
|
|
Y-Y1=\=Xdist,
|
|
Dist1 is Xdist + 1,
|
|
noattack(Y,Ylist,Dist1).
|