Re: Non dominating queens problem
- From: andrew.verden@xxxxxxxxxxxxx (Dr Andrew R. Verden)
- Date: 29 Apr 2005 05:18:25 -0700
"TS" <chewthiamsoon@xxxxxxxxx> wrote in message news:<1114436008.632834.11670@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>...
> Hi, anyone got any solution in prolog to the non dominating queens
> problem?
:- import(const_domain).
queens(N, Queens) :-
make_queens(1, N, Queens),
Queens in 1..N,
queen_constraints(Queens),
!,
solution(Queens).
make_queens(N, Max, [_Queen|Queens]) :-
N =< Max,
N1 is N+1,
make_queens(N1, Max, Queens).
make_queens(N, Max, []) :- N > Max.
queen_constraints([]).
queen_constraints([Queen|Queens]) :-
noattack(Queens, Queen, 1), !,
queen_constraints(Queens).
noattack([], _, _).
noattack([OtherQueen|Queens], Queen, Dist) :-
Queen ?\= OtherQueen,
Queen ?\= OtherQueen + Dist,
Queen ?\= OtherQueen - Dist,
Dist1 is Dist + 1,
noattack(Queens, Queen, Dist1).
solution(Queens) :-
label(Queens, [card]).
A 100 queens takes 0.08 seconds on a PC
1000 queens takes somewhat longer!
CLP brings at least two orders of magnitude in performance improvement
for free as the code is the same essentially. After that you also need
to program CLP intelligently.
See www.ifcomputer.de ...
.
- Follow-Ups:
- Re: Non dominating queens problem
- From: Joachim Schimpf
- Re: Non dominating queens problem
- References:
- Non dominating queens problem
- From: TS
- Non dominating queens problem
- Prev by Date: Re: Riddle Solver send+more=money
- Next by Date: Re: Non dominating queens problem
- Previous by thread: Re: Non dominating queens problem
- Next by thread: Re: Non dominating queens problem
- Index(es):
Relevant Pages
|
|