queens.pl

来自「PRl教学程序 PRl教学程序 PRl教学程序」· PL 代码 · 共 54 行

PL
54
字号
go:-
    statistics(runtime,[Start|_]),
    queens(8),
    statistics(runtime,[End|_]),
    T is End-Start,
    write('execution time is :'),write(T).
    
queens(N):-
    make_list(N,List),
    range(1,N,D),
    constrain_queens(List),
    label(List,D),
    write(List),nl,
    fail.
queens(_).

constrain_queens([]).
constrain_queens([X|Y]):-
    safe(X,Y,1),
    constrain_queens(Y).

safe(_,[],_).
safe(X,[Y|T],K):-
    noattack(X,Y,K),
    K1 is K+1,
    safe(X,T,K1).

delay noattack(X,Y,K) :- var(X) : {ins(X),ins(Y)}.
delay noattack(X,Y,K) :- var(Y) : true.
noattack(X,Y,K):-true :
    X =\= Y,
    X+K =\= Y,
    X-K =\= Y.

make_list(0,[]):-!.
make_list(N,[_|Rest]):-
    N1 is N-1,
    make_list(N1,Rest).

range(N,N,[N]) :- !.
range(M,N,[M|Ns]) :-
	M < N,
	M1 is M+1,
	range(M1,N,Ns).

label([],D).
label([V|Vs],D):-
    select(D,Rest,V),
    label(Vs,Rest).
    
select([X|Xs],Xs,X).
select([Y|Ys],[Y|Zs],X) :- select(Ys,Zs,X).

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?