Sunday, 16 June 2019

Write a program to solve N Queens problem. Artificial intelligence GTU


 N Queens problem using predicate logic, Prolog, Swi-prolog.



DOMAINS

queen    = q(integer, integer)

queens   = queen*

freelist = integer*

board    = board(queens, freelist, freelist, freelist, freelist)

PREDICATES

nondeterm placeN(integer, board, board)

nondeterm place_a_queen(integer, board, board)

nondeterm nqueens(integer)

nondeterm makelist(integer, freelist)

nondeterm findandremove(integer, freelist, freelist)

nextrow(integer, freelist, freelist)

CLAUSES

nqueens(N):-

makelist(N,L),Diagonal=N*2-1,makelist(Diagonal,LL),

placeN(N,board([],L,L,LL,LL),Final), write(Final).

placeN(_,board(D,[],[],D1,D2),board(D,[],[],D1,D2)):-!.

placeN(N,Board1,Result):-

place_a_queen(N,Board1,Board2),

placeN(N,Board2,Result).




place_a_queen(N,board(Queens,Rows,Columns,Diag1,Diag2),






board([q(R,C)|Queens],NewR,NewC,NewD1,NewD2)):-

nextrow(R,Rows,NewR),

findandremove(C,Columns,NewC),

D1=N+C-R,findandremove(D1,Diag1,NewD1),

D2=R+C-1,findandremove(D2,Diag2,NewD2).

findandremove(X,[X|Rest],Rest).

findandremove(X,[Y|Rest],[Y|Tail]):-

findandremove(X,Rest,Tail).


makelist(1,[1]).

makelist(N,[N|Rest]) :-

N1=N-1,makelist(N1,Rest).

nextrow(Row,[Row|Rest],Rest).
goal
nqueens(5).

No comments:

Post a Comment

It's time To increase blogging capability. To have a chance to contribute in digital world. Any Interested People who want to make t...