このディレクトリの索引


nクイーン(_nクイーン,_一解) :-
        '1からnまでの数ならびを得る(縦横の利き筋はこれを行ごとに一つずつ選択することで回避される)'(_nクイーン,_数ならび),
        行ごとに順に駒を置き利き筋を調べて一解を得る(_数ならび,[],_一解).

行ごとに順に駒を置き利き筋を調べて一解を得る([],_一解,_一解).
行ごとに順に駒を置き利き筋を調べて一解を得る(_位置ならび,Qs,_一解) :-
        '駒の位置と残り駒の位置ならびを得る(この選択自体が縦横の利き筋検査になっている)'(_駒の位置,_位置ならび,_残り駒の位置ならび),
        斜めの利き筋に駒はない(_駒の位置,1,Qs),
        行ごとに順に駒を置き利き筋を調べて一解を得る(_残り駒の位置ならび,[_駒の位置|Qs],_一解).

'駒の位置と残り駒の位置ならびを得る(この選択自体が縦横の利き筋検査になっている)'(_駒の位置,[_駒の位置|_残り駒の位置ならび],_残り駒の位置ならび).

'駒の位置と残り駒の位置ならびを得る(この選択自体が縦横の利き筋検査になっている)'(X,[H|T],[H|T1]) :-
        '駒の位置と残り駒の位置ならびを得る(この選択自体が縦横の利き筋検査になっている)'(X,T,T1).

斜めの利き筋に駒はない(_,_,[]).
斜めの利き筋に駒はない(Q,_隔たり,[Q1|Qs]) :-
        Q + _隔たり =\= Q1,
        Q - _隔たり =\= Q1,
        _隔たり_2 is _隔たり + 1,
        斜めの利き筋に駒はない(Q,_隔たり_2,Qs).

'1からnまでの数ならびを得る(縦横の利き筋はこれを行ごとに一つずつ選択することで回避される)'(_nクイーン,_数ならび) :-
        findall(M,between(1,_nクイーン,M),_数ならび).