%program za rjesenje problema 8 kraljica %Lista je izlazni argument u kojeg se upisuje rjesenje problema. %Raspored kraljica se predstavlja listom koordinata redaka i stupaca rjesenje(Raspored):- Raspored=[_/0,_/1,_/2,_/3,_/4,_/5,_/6,_/7], Retci=[0,1,2,3,4,5,6,7], Dijag_uzl=[-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7], Dijag_sil=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14], rijesi(Raspored, Retci, Dijag_uzl, Dijag_sil). %argumenti predikata rijesi su redom: % rjesenje problema (dozvoljeni raspored kraljica); % pri pozivu procedure koordinate stupaca % moraju biti instancirane. % redak kraljice koja se trenutno obraduje; % lista slobodnih silaznih dijagonala koje su opisane % razlikom retka i stupca svakog pripadnog polja; % lista slobodnih uzlaznih dijagonala koje su opisane % sumom stupca i retka svakog pripadnog polja; rijesi([],_,_,_). rijesi([Redak/Stupac|Tail], R, Du, Ds):- obrisi(Redak,R,R1), % brise Redak iz R, rezultat je R1 U is -Redak+Stupac, obrisi(U, Du, Du1), S is Redak+Stupac, obrisi(S, Ds, Ds1), rijesi(Tail, R1, Du1, Ds1). obrisi(Element, [Element|Rep], Rep). obrisi(Element, [Element1|Rep], [Element1|Rep1]):- obrisi(Element,Rep,Rep1).