На SWI-Prolog:
| Код | % клетки шахматной доски клетки([8,8], L, [[8,8]|L]). клетки([X,Y], L, L2):- Y<8,!, Y1 is Y+1, клетки([X,Y1], [[X,Y]|L], L2). клетки([X,Y], L, L2):- Y =:= 8,!, Y1 is 1, X1 is X+1, клетки([X1,Y1], [[X,Y]|L], L2). клетки(L):-клетки([1,1],[],L).
небьет([X1,Y1],[X2,Y2]):- X1=\=X2, Y1=\=Y2, Y2-Y1=\=X2-X1, Y2-Y1=\=X1-X2.
% расстановки двух ферзей расстановки([_],[],L,L). расстановки([_|Kla],[],L,L2):- расстановки(Kla,Kla,L,L2). расстановки([A|Kla],[B|Klb],L,L2):- небьет(A,B),!, расстановки([A|Kla],Klb,[[A,B]|L],L2). расстановки([A|Kla],[_|Klb],L,L2):- расстановки([A|Kla],Klb,L,L2).
все_расстановки(L):- клетки(Kl), расстановки(Kl,Kl,[],L).
|
и считаем:
| Цитата | ?- все_расстановки(L),length(L,N).
L = [[[2, 1], [1, 3]], [[2, 1], [1, 4]], [[2, 1], [1, 5]], [[2, 1], [1, 6]], [[2, 1], [1, 7]], [[2, 1], [1|...]], [[2|...], [...|...]], [[...|...]|...], [...|...]|...] N = 1288
Yes ?-
|
1288 различных способов расстановки. |