N . N , . , : , , .
, 1 N. , , , :
Diagonal = N + Column - Row (type 1)
Diagonal = Row + Column - 1 (type 2)
1 1 , Tun1 (\), Tun2 - (/). 9.5. Tun2 44.
| 1 | 2 | 3 | 4 |
1 | 1 | 2 | 3 | 4 |
2 | 2 | 3 | 4 | 5 |
3 | 3 | 4 | 5 | 6 |
4 | 4 | 5 | 6 | 7 |
. 9.5. 2 .
N , , , .
:
queen = q(integer, integer).
. , :
queens = queen*.
, , , , . ֳ :
freelist = integer*.
', :
board = board(queens, freelist,freelist,freelist,freelist)
freelist , 1 2.
, 44 :
board([],[1,2,3,4],[1,2,3,4],[1,2,3,4,5,6,7],[1,2,3,4,5,6,7]),
:
board([q(1,1)],[2,3,4],[2,3,4],[1,2,3,4,5,6,7],[2,3,4,5,6,7])
, , N . placeN(integer, board, board) . , . freerows freecols - :
placeN(_, board(D,[],[],X,Y), board(D,[],[],X,Y)):-!.
placeN(_, Board1, Rsult):-