В шахматах ферзь может бить любую фигуру, стоящую в одном с ним ряду, столбце или диагонали Необходимо расставить на шахматной доске 8 ферзей так, чтобы ни один из них не бил другого.
Традиционное (процедурное) решение задачи
Для описания позиций фигур используется матрица
Программа решает задачу, систематически перебирая значения в матрице и проверяя каждую позицию: не удовлетворяет ли она условию?
Традиционная программа подобна человеку, находящемуся над доской и передвигающему безжизненные фигуры
Объектно-ориентированное решение задачи
В объектно-ориентированном подходе фигуры наделяются жизнью, чтобы они решили проблему самостоятельно
Вместо одного существа, управляющего процессом, ответственность за нахождение решения разделяется среди многих взаимодействующих агентов
Шахматные фигуры выступают одушевленными существами, взаимодействующими между собой, которым поручено найти решение
Исследование задачи
В любом случае никакие два ферзя не могут занимать один столбец и, следовательно, все столбцы заняты
Каждый ферзь должен знать только о своем соседе слева
Приемлемое решение для столбца N - это такая конфигурация столбцов с 1 по N, в которой ни один ферзь из этих столбцов не бьет другого
Каждому ферзю будет поручено найти приемлемое решение для себя и своих соседей слева
Решение всей задачи будет получено, когда самый правый ферзь отыщет приемлемое решение
Получение общего решения
Сначала все ферзи располагаются на первой строке разных столбцов доски
Последовательно для каждого ферзя, начиная с крайнего левого, находится приемлемое решение
для него и его соседей слева
Решение будет получено, когда получим приемлемое решение для крайнего правого ферзя или когда он не будет никем атакован
Получение приемлемого решения для ферзя и его соседей слева
Ферзь проверяет, находится ли он под атакой ферзей слева
Если его атакуют, то он смещается вверх
Если смещаться некуда, то он просит сместиться соседей слева для получения приемлемого решения и сам смещается на первую строку
Крайний левый ферзь перемещается вверх, а если смещаться некуда, 8 то - на первую строку