Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.pdf
Скачиваний:
35
Добавлен:
11.04.2014
Размер:
97 Кб
Скачать

Задача о восьми ферзях

В шахматах ферзь может бить любую фигуру, стоящую в одном с ним ряду, столбце или диагонали

Необходимо расставить на шахматной доске 8 ферзей так, чтобы ни один из них не бил другого

1

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

8Q

7

Q

6

Q

5Q

 

 

 

4

 

Q

3

 

Q

2

 

Q

1

Q

 

 

a b

c d e f g h

2

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

Для описания позиций фигур используется матрица

Программа решает задачу, систематически перебирая значения в матрице и проверяя каждую позицию: не удовлетворяет ли она условию?

Традиционная программа подобна человеку, находящемуся над доской и передвигающему безжизненные фигуры

3

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

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

Вместо одного существа, управляющего процессом, ответственность за нахождение решения разделяется среди многих взаимодействующих агентов

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

4

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

В любом случае никакие два ферзя не могут занимать один столбец и, следовательно, все столбцы заняты

Каждый ферзь должен знать только о своем соседе слева

Приемлемое решение для столбца N - это такая конфигурация столбцов с 1 по N, в которой ни один

5 ферзь из этих столбцов не бьет другого

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

Каждому ферзю будет поручено найти приемлемое решение для себя и своих соседей слева

Решение всей задачи будет получено, когда самый правый ферзь отыщет приемлемое решение

6

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

Сначала все ферзи располагаются на первой строке разных столбцов доски

Последовательно для каждого ферзя, начиная с крайнего левого, находится приемлемое решение для него и его соседей слева

Решение будет получено, когда получим приемлемое решение для крайнего правого ферзя или когда

7 он не будет никем атакован

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

Ферзь проверяет, находится ли он под атакой ферзей слева

Если его атакуют, то он смещается вверх

Если смещаться некуда, то он просит сместиться соседей слева для получения приемлемого решения и сам смещается на первую строку

Крайний левый ферзь перемещается вверх, а если 8 смещаться некуда, то - на первую строку

Расстановка первых трех ферзей

8

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

5

 

 

Q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

3

 

Q

 

 

 

 

 

 

3

 

Q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

1

Q

Q

Q

Q

Q

Q

Q

Q

Q

 

 

Q

Q

Q

Q

Q

Q

Q

 

 

 

Q

Q

Q

Q

Q

 

 

 

 

 

 

a b c d e f g h

 

a b c d e f g h

 

a b c d e f g h

шаг 1

шаг 2

шаг 3

9

 

Расстановка шестого ферзя

8

 

8

Q

8

Q

7

 

7

 

7

 

6

Q

6

Q

6

Q

5

5

5

4

Q

4

 

4

 

3

Q

3

Q

3

Q

2

Q

2

Q

2

Q

1 Q

Q Q Q

1 Q

Q Q Q

1 Q

Q Q Q

a b c d e f g h

a b c d e f g h

a b c d e f g h

 

шаг 1

 

шаг 2

 

шаг 3

10