?? queens.pro
字號:
queens(N,Qs):-
%主程序,先使用range/3生成列表,再使用queens/3來放置皇后。
range(1,N,Ns),queens(Ns,[],Qs).
queens(UnplacedQs,SafeQs,Qs):-
% UnplaceQs是還沒有放置的皇后,SafeQs是已經放好了的皇后列表。
delete(Q,UnplacedQs,UnplacedQs1),
% 首先使用delete/3從UnplaceQs列表中選擇一個皇后出來。
not(attack(Q,SafeQs)),
% 判斷它是否與已經放好了的皇后能夠互相攻擊,
queens(UnplacedQs1,[Q|SafeQs],Qs).
% 如果不能攻擊,那么就把此皇后放到SafeQs列表中,
% 并且開始選擇下一個皇后。
queens([],Qs,Qs).
% 最后當所有的皇后都放置好了,就把第二個參數傳給第三個參數。
range(M,N,[M|Ns]):-
M<N,M1 is M+1,range(M1,N,Ns).
range(N,N,[N]).
attack(X,Xs):-
attack(X,1,Xs).
attack(X,N,[Y|Ys]):-
X is Y+N;X is Y-N.
attack(X,N,[Y|Ys]):-
N1 is N+1,attack(X,N1,Ys).
delete(A,[A|X],X).
delete(A,[B|X],[B|Y]) :- delete(A,X,Y).
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -