0
나이트 투어 문제를 해결하려고합니다. 최소한의 움직임이있는 자세를 취해야합니다. 나는 위치 (search_path)에있는 움직임의 수를 계산하는 나의 규칙을 가지고 있지만, 나는 그 규칙의 최소값 (search_path_min)을 얻어야한다.프롤로그에서 최소값 가져 오기
moves(X, Y, Xi, Yi, Size) :-
(Xi is X - 1, Yi is Y - 2
; Xi is X - 1, Yi is Y + 2
; Xi is X + 1, Yi is Y - 2
; Xi is X + 1, Yi is Y + 2
; Xi is X - 2, Yi is Y - 1
; Xi is X - 2, Yi is Y + 1
; Xi is X + 2, Yi is Y - 1
; Xi is X + 2, Yi is Y + 1),
Xi > 0,
Yi > 0,
Xi =< Size*Size,
Yi =< Size*Size.
posibles_moves(Size, X, Y, Tour, Xi, Yi):-
moves(X, Y, Xi, Yi, Size),
\+ member((Xi,Yi),Tour).
posibles_moves_count(Size, X, Y, Tour, Count):-
findall(_, posibles_moves(Size, X, Y, Tour, Xi, Yi), Moves),
length(Moves, Count).
search_path(Size, X, Y, Tour, Xi, Yi, Count):-
posibles_moves(Size, X, Y, Tour, Xi, Yi),
posibles_moves_count(Size, Xi, Yi, [(Xi,Yi)|Tour],Count).
search_path_min(Size, X, Y, Tour, Xi, Yi):-
search_path(Size, X, Y, Tour, Xi, Yi, Count),
?
?
?
?
knight_tour(Size, X, Y, Tour, Path) :-
length(Tour, L),
L =:= Size * Size - 1,
_Tour = [(X, Y) | Tour],
reverse(_Tour, Path).
knight_tour(Size, X, Y, Tour, Path) :-
length(Visits, L),
L < Size * Size - 1,
search_path_min(Size, X, Y, Tour, Xi, Yi),
_Tour = [(X, Y) | Tour],
knight_tour(Size, Xi, Yi, _Tour, Path).
내 규칙 search_path Count 변수의 최소값을 갖는 결과를 가져와야합니다. 감사합니다. .