๐Ÿค–
B.TECH II YEAR โ€ข II SEMESTER โ€ข R22

Skill Development Course - Lab Manual

PROLOG / LISP / PySWIP โ€ข Program 5 Solution

๐Ÿ“˜ R22 Regulation ๐ŸŽ“ II Year ๐Ÿ“š II Semester ๐Ÿค– Skill Development Course ๐Ÿงช Lab Program 5
Aim

Write a program to solve 4-Queens problem

โ† All Programs

๐Ÿ’ป Solution

week6.pl
/* Description: 

In the 4 Queens problem the object is to place 4 queens on a chessboard in such a way that no queens can capture a piece. This means that no two queens may be placed on the same row, column, or diagonal.

*/

% 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).

๐Ÿ“ค Output

w6.txt
% Goal

nqueens(4),nl.
board([q(1,2),q(2,4),q(3,1),q(4,3),[],[],[7,4,1],[7,4,1])
yes
โ† Program 4 Program 6 โ†’
โ† Back to Skill Development Course Lab Programs ๐Ÿ“š All Lab Manuals