山登りアルゴリズムとビーム探索アルゴリズムを使用して、nqueens パズル用に Prolog で 2 つのプログラムを作成しました。
残念ながら、プログラムが正しいかどうかを確認する経験がなく、行き詰まっています。
誰かが私を助けてくれれば幸いです。残念ながら、ヒル クライミングのプログラムは正しくありません。:(
ビームサーチのプログラムは次のとおりです。
queens(N, Qs) :-
range(1, N, Ns),
queens(Ns, [], Qs).
range(N, N, [N]) :- !.
range(M, N, [M|Ns]) :-
M < N,
M1 is M+1,
range(M1, N, Ns).
queens([], Qs, Qs).
queens(UnplacedQs, SafeQs, Qs) :-
select(UnplacedQs, UnplacedQs1,Q),
not_attack(SafeQs, Q),
queens(UnplacedQs1, [Q|SafeQs], Qs).
not_attack(Xs, X) :-
not_attack(Xs, X, 1).
not_attack([], _, _) :- !.
not_attack([Y|Ys], X, N) :-
X =\= Y+N,
X =\= Y-N,
N1 is N+1,
not_attack(Ys, X, N1).
select([X|Xs], Xs, X).
select([Y|Ys], [Y|Zs], X) :- select(Ys, Zs, X).