У Глеба есть зоопарк, который имеет форму круга. Ваша задача - поймать всех животных, которые разбежались по зоопарку
У Глеба есть зоопарк, который имеет форму круга. Ваша задача - поймать всех животных, которые разбежались по зоопарку, и вернуть их обратно в клетки. В зоопарке находится n животных разных видов, принадлежащих к одному из 26 видов. Время выполнения ограничено 1 секундой, а доступная память - 256 мегабайт. Ввод осуществляется через стандартный ввод или файл input.txt, а вывод должен быть записан в стандартный вывод или файл output.txt.
Donna 38
Чтобы решить данную задачу, мы можем использовать алгоритм поиска в ширину (BFS, breadth-first search). Давайте рассмотрим шаги алгоритма:1. Создаем переменную `visited`, чтобы отслеживать, посещали ли мы данную клетку в зоопарке.
2. Создаем переменную `queue`, которая функционирует как очередь. Начинаем с добавления всех клеток, содержащих животных, в эту очередь.
3. Создаем переменную `steps`, которая будет отслеживать количество шагов, необходимых для вернуть всех животных в клетки.
4. Создаем переменную `directions`, которая содержит массив из смещений для перемещения по соседним клеткам в зоопарке (вправо, влево, вверх, вниз).
5. Запускаем цикл, пока очередь `queue` не пуста:
1. Извлекаем первую клетку из очереди.
2. Если данная клетка уже была посещена, пропускаем данный шаг.
3. Иначе, отмечаем данную клетку как посещенную в `visited`.
4. Если животное в данной клетке принадлежит к одному из 26 видов, удаляем его из зоопарка, увеличивая таким образом `steps` на 1.
5. Для каждого смещения `dir` в `directions`:
1. Вычисляем новые координаты клетки после смещения.
2. Если новые координаты находятся в пределах зоопарка и данная клетка не была посещена, добавляем ее в `queue`.
6. Возвращаем значение `steps`, которое содержит количество шагов, необходимых для вернуть всех животных в клетки.
Ниже приведена реализация данного алгоритма на языке Python:
Данная функция `catch_animals` принимает на вход количество животных `n` и массив `zoo`, представляющий зоопарк. Каждая клетка зоопарка имеет формат `(животное, строка, столбец)`. Функция возвращает количество шагов `steps`, необходимых для вернуть всех животных в клетки.
Для решения данной задачи необходимо будет использовать стандартный ввод и вывод. Пример такого кода:
Данный код считывает ввод с помощью функции `input()` и передает его в функцию `catch_animals`, а затем выводит результат с помощью функции `print()`. Необходимо учесть, что все необходимые проверки на корректность ввода и обработку исключений были опущены из примера для простоты.