Menu


Notice: Undefined index: url2 in /home/u681245571/domains/studyglance.in/public_html/labprograms/aidisplay.php on line 84

Notice: Undefined index: url3 in /home/u681245571/domains/studyglance.in/public_html/labprograms/aidisplay.php on line 85

Notice: Undefined index: url4 in /home/u681245571/domains/studyglance.in/public_html/labprograms/aidisplay.php on line 86

Notice: Undefined index: opurl2 in /home/u681245571/domains/studyglance.in/public_html/labprograms/aidisplay.php on line 89

Notice: Undefined index: opurl3 in /home/u681245571/domains/studyglance.in/public_html/labprograms/aidisplay.php on line 90

Notice: Undefined index: opurl4 in /home/u681245571/domains/studyglance.in/public_html/labprograms/aidisplay.php on line 91

Artificial Intelligence [ Lab Programs ]


Aim:

Write a program in prolog to solve 4-Queens problem

Solution :

/* 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:

% Goal

nqueens(4),nl.
board([q(1,2),q(2,4),q(3,1),q(4,3),[],[],[7,4,1],[7,4,1])
yes

Related Content :

Artificial Intelligence Lab Programs

1) Write a program in prolog to implement simple facts and Queries View Solution

2) Write a program in prolog to implement simple arithmetic View Solution

3) Write a program in prolog to solve Monkey banana problem View Solution

4) Write a program in prolog to solve Tower of Hanoi View Solution

5) Write a program in prolog to solve 8 Puzzle problems View Solution

6) Write a program in prolog to solve 4-Queens problem View Solution

7) Write a program in prolog to solve Traveling salesman problem View Solution

8) Write a program in prolog for Water jug problem View Solution