SWI-Prolog, Шахматная задача, Конь

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Столкнулся с "классической" задачей, о которой все говорят которую все знают, но упорно прячут решение. Итак: Задача о конях. Задача состоит в отыскании всех расстановок максимально возможного количества коней на пустой шахматной доске (NxN), таких, в которых ни один из коней не находится под боем другого. Собственно, вариация задачи о 8 Ферзях, решений которой довольно много, как и решений задачи о Ладьях. При этом, что одна, что вторая, не вызывают особых сложностей в описании возможных ходов. Но как быть с этим животным? Очевидно, что максимальное число коней равно N*N/2. И все фигуры будут стоять либо на черных клетках, либо на белых. В силу своей бездарности в прологе у Братко была взята программа, решающая задачу о Ферзях:
И предпринята попытка переделать её под коней, а именно, изменить функцию noattack() (для N=4 и 8 коней, ибо для N=8 все 32 коня не умещаются на экране вывода, просто скрываются под многоточием после восьмого элемента, как выводить больше, кстати?):
Но пролог со мной не согласился. Что не так?

Решение задачи: «SWI-Prolog, Шахматная задача, Конь»

textual
Листинг программы
between(1, 8, X), between(1, 8, Y), between(1, 8, X1), between(1, 8, Y1), not([X,Y]=[X1,Y1]), move_chess_figure(Figure, [X, Y], [X1, Y1]).

Объяснение кода листинга программы

  1. Между 1 и 8 находится переменная X.
  2. Между 1 и 8 находится переменная Y.
  3. Между 1 и 8 находится переменная X1.
  4. Между 1 и 8 находится переменная Y1.
  5. Переменные X и Y не равны X1 и Y1.
  6. Выполняется ход фигуры на шахматной доске, где Figure - это название фигуры, [X, Y] - начальное положение фигуры, [X1, Y1] - конечное положение фигуры.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5