Статья Автор: Лебедев Дмитрий

TUZ_5-11. Захват максимального количества шашек на шахматной доске

TUZ_5-11. Захват максимального количества шашек на шахматной доске

TUZ_5-11. Захват максимального количества шашек на шахматной доске
5.11. Захват максимального количества шашек на шахматной доске
Среди настольных игр на шахматной доске n×n с черными и белыми полями широко известна игра в шашки.
Она предполагает взятие фигур противника. Игроки поочередно делают ходы, перемещая шашки на соседнее поле по диагонали, причем фигуры всегда должны оставаться на белых полях и не могут двигаться назад.
Если две фигуры разного цвета соседствуют по диагонали, то игрок, кому выпал черед делать следующий ход,
может перепрыгнуть через фигуру противника и взять ее, при условии что позади фигуры противника есть свободное белое поле. Если у игрока есть возможность взять фигуру противника, он должен это сделать, а если есть возможность последовательно взять несколько фигур, то игрок должен взять их все. Игрок, потерявший все фигуры, считается проигравшим.
Цель этого задания состоит в том, чтобы взять максимальное количество фигур противника за один ход.
Ход со взятием фигуры противника, находящейся по соседству на диагонали, может выполняться только в направлениях (1, 1), (1, –1), (–1, 1) и (–1, –1).
Ваша задача: написать функцию, которая принимает размер шахматной доски, координату фигуры,
выполняющей ход, и координаты фигур противника и возвращает количество фигур, взятых за один ход.
В табл. 5.11 показаны ожидаемые результаты для некоторых входных данных.
Таблица 5.11. Некоторые ожидаемые результаты для задачи определения максимального количества шашек на шахматной доске, которые можно взять из текущей позиции
n, x, y, pieces Ожидаемый результат
5, 1, 3
(2, 4), (2, 3), (2, 2), (1, 2), (3, 3), (1, 3)
1
8, 0, 4
(2, 1), (3, 1), (1, 3), (4, 1), (1, 4)
2
10, 4, 7
(2, 1), (9, 1), (2, 1), (6, 5)
0

Алгоритм
Алгоритм принимает размер шахматной доски n, координаты x и y фигуры, выполняющей ход,
множество pieces c координатами фигур противника и возвращает количество взятых фигур.
Для исследования всех возможных ходов из текущего состояния алгоритм использует поиск в ширину.
Он инициализирует множество visited посещенных полей, чтобы отслеживать поля, посещавшиеся
во время поиска в ширину, и очередь queue, содержащую начальное состояние.
Он также инициализирует текущее максимальное число взятых фигур.
Затем алгоритм входит в цикл while и удаляет следующее возможное состояние из очереди.
Он обновляет текущее максимальное количество фигур, взятых в этом состоянии.
Для каждого возможного направления движения по диагонали алгоритм вычисляет новую позицию и позицию взятой фигуры. Если алгоритм находит новое состояние со взятой фигурой, он создает новое множество фигур без взятой фигуры и проверяет, посещалось ли уже это состояние. Если нет, то алгоритм добавляет новое состояние в множество посещавшихся состояний в очередь queue. Поиск производится до тех пор, пока очередь не опустеет, после чего возвращается текущее максимальное количество взятых фигур.


Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать