Главная ООП » Файлы » Лекции » ООП [ Добавить материал ]

Решение задачи о восьми ферзях методом ООП

[Скачать с сервера (86.2 Kb) - бесплатно] 10.09.2010, 22:08
Фрагменты из pdf презентации:

В шахматах ферзь может бить любую фигуру, стоящую в одном с ним ряду, столбце или диагонали
Необходимо расставить на шахматной доске 8 ферзей так, чтобы ни один из них не бил другого.


Традиционное (процедурное) решение задачи

  • Для описания позиций фигур используется матрица
  • Программа решает задачу, систематически перебирая значения в матрице и проверяя каждую позицию: не удовлетворяет ли она условию?
  • Традиционная программа подобна человеку, находящемуся над доской и передвигающему безжизненные фигуры

Объектно-ориентированное решение задачи

  • В объектно-ориентированном подходе фигуры наделяются жизнью, чтобы они решили проблему самостоятельно
  • Вместо одного существа, управляющего процессом, ответственность за нахождение решения разделяется среди многих взаимодействующих агентов
  • Шахматные фигуры выступают одушевленными существами, взаимодействующими между собой, которым поручено найти решение

Исследование задачи

  • В любом случае никакие два ферзя не могут занимать один столбец и, следовательно, все столбцы заняты
  • Каждый ферзь должен знать только о своем соседе слева
  • Приемлемое решение для столбца N - это такая конфигурация столбцов с 1 по N, в которой ни один ферзь из этих столбцов не бьет другого
  • Каждому ферзю будет поручено найти приемлемое решение для себя и своих соседей слева
  • Решение всей задачи будет получено, когда самый правый ферзь отыщет приемлемое решение

Получение общего решения

  • Сначала все ферзи располагаются на первой строке разных столбцов доски
  • Последовательно для каждого ферзя, начиная с крайнего левого, находится приемлемое решение
  • для него и его соседей слева
  • Решение будет получено, когда получим приемлемое решение для крайнего правого ферзя или когда он не будет никем атакован

Получение приемлемого решения для ферзя и его соседей слева

  • Ферзь проверяет, находится ли он под атакой ферзей слева
  • Если его атакуют, то он смещается вверх
  • Если смещаться некуда, то он просит сместиться соседей слева для получения приемлемого решения и сам смещается на первую строку
  • Крайний левый ферзь перемещается вверх, а если смещаться некуда, 8 то - на первую строку
Похожие материалы:

Добавил: COBA (10.09.2010) | Категория: ООП
Просмотров: 5748 | Загрузок: 1230 | Рейтинг: 2.5/2 |
Теги: программирование, ООП
Комментарии (0)

Имя *:
Email *:
Код *: