⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queens_fc.pl

📁 PRl教学程序 PRl教学程序 PRl教学程序
💻 PL
字号:
%   File   : queens.pl
%   Author : Neng-Fa ZHOU
%   Date   : 1992
%   Purpose: solve N-queens problem with CLP(FD)


go:-
    write('N=?'),read(N),queens(N).

queens(N):-
    statistics(runtime,[Start|_]),
    once(N,Queens),
    statistics(runtime,[End|_]),
    write(Queens),nl,
    T is End-Start,
    write('%execution time ='), write(T), write(' milliseconds'),nl.

queens(N,Obj):-
    statistics(runtime,[Start|_]),
    once(N,Queens),
    statistics(runtime,[End|_]),
    T is End-Start,
    write(Queens),nl,
    write('%execution time ='), write(T), write(' milliseconds'),nl,
    javaMethod(Obj,drawQueens(Queens)).

once(N,List):-
    make_list(N,List),
    List in 1..N,
    constrain_queens(List),
    labeling_ff(List).

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).



/*
noattack(X,Y,K):-
    X #\= Y,
    X+K #\= Y,
    X-K #\= Y.
*/
delay noattack(X,Y,K):-dvar(X),dvar(Y) : true.
noattack(X,Y,K):-dvar(X) : 
    X1 is Y+K, X2 is Y-K, 
    domain_set_false(X,Y),
    domain_set_false(X,X1),
    domain_set_false(X,X2).
noattack(X,Y,K):-dvar(Y) : 
    Y1 is X+K,Y2 is X-K,
    domain_set_false(Y,X),
    domain_set_false(Y,Y1),
    domain_set_false(Y,Y2).
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).

⌨️ 快捷键说明

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