Цитата:
Сообщение от aag
Задача о ферзях: расставить N ферзей на доске размером NxN так, чтобы ни один не находился под боем.
У Вас N = 9.
Вытаскивайте фсе решения и сравнивайте с заданной позицией - 6 совпадают, ещё 3 попарно соседи.
|
Сделал решение на N = 9; Помогите отсюда вытащить ответ на задачу, как это сделать с помощью пролога?
prolog Код:
myhi([]). % когда список пуст - решение найдено
myhi([ Row/Col | Rest]) :- % в противном случае для каждой строки
myhi(Rest), % помещаем муху в каждую высокую строку
member(Col, [1,2,3,4,5,6,7,8,9]), % и выбираем одну из возможных позиций столбца
safe( Row/Col, Rest). % смотрим безопасная ли позиция, если нет,
% возвращаемся назад и пробуем другую
safe(Anything, []). % пустая занавеска всегда безопасная
safe(Row/Col, [Row1/Col1 | Rest]) :- % проверяем строку
Col =\= Col1, % проверяем столбец
Col1 - Col =\= Row1 - Row, % проверяем диагональ
Col1 - Col =\= Row - Row1,
safe(Row/Col, Rest). % если всё нормально, пробуем подставить
member(X, [X | Tail]).
member(X, [Head | Tail]) :-
member(X, Tail).
myhi([1/R9, 2/R8, 3/R7, 4/R6, 5/R5, 6/R4, 7/R3, 8/R2, 9/R1]).