# Różnice

Różnice między wybraną wersją a wersją aktualną.

 — pl:prolog:pllib:8_queens_4 [2019/06/27 15:50] (aktualna) Linia 1: Linia 1: + ====== 8 queens 4 ====== + {{tag>​puzzle chess}} + ===== Description ===== + Program solves 8 queens problem + + **Source**: ​ PROLOG programming for artificial intelligence,​ 3rd Edition, Harlow, 2001, ISBN 0-201-40375-7. + ===== Download ===== + Program source code: {{prolog:​pllib:​8_queens_4.pl}} + ===== Listing ===== + + % Figure 4.9   ​Program 2 for the eight queens problem. + + + % solution( Queens) if + %   ​Queens is a list of Y-coordinates of eight non-attacking queens + + solution( Queens) ​ :- + ​permutation( [1,​2,​3,​4,​5,​6,​7,​8],​ Queens), + safe( Queens). ​ + + permutation( [], [] ). + + permutation( [Head | Tail], PermList) ​ :- + ​permutation( Tail, PermTail), + del( Head, PermList, PermTail). ​  % Insert Head in permuted Tail + + % del( Item, List, NewList): deleting Item from List gives NewList + + del( Item, [Item | List], List). ​ + + del( Item, [First | List], [First | List1] )  :- + del( Item, List, List1). ​ + + % safe( Queens) if + %   ​Queens is a list of Y-coordinates of non-attacking queens + + safe( [] ). + + safe( [Queen | Others] )  :- + safe( Others), + ​noattack( Queen, Others, 1). + + noattack( _, [], _). + + noattack( Y, [Y1 | Ylist], Xdist) ​ :- + Y1-Y =\= Xdist, + Y-Y1 =\= Xdist, + Dist1 is Xdist + 1, + ​noattack( Y, Ylist, Dist1). + + ​ + ===== Comments =====
pl/prolog/pllib/8_queens_4.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)