|
Лабиринт
(Время: 1 сек. Память: 16 Мб Сложность: 55%)
Для решения этой задачи следует применить волновой алгоритм (поиск в ширину). Для хранения информации о лабиринте удобно использовать 3х-мерный массив, который сразу следует заполнить элементами согласно входным данным. Далее, следует пометить те ячейки, в которые принц из начальной точки может попасть за один ход, далее помечаются ячейки, в которые принц попадет ровно за 2 хода, это достигается перебором ранее помеченных одним ходом принца ячеек и т.д.: на k-м шаге помечаются ячейки, в которые принц попадет за k шагов путем перебора предыдущих ячеек с расстоянием k-1. Процесс продолжается до тех пор, пока на некотором шаге мы не достигнем принцессы, в момент достижения в качестве ответа следует вывести значение 5*k.
Для хранения координат ячеек на предыдущем шаге можно использовать как стек, так и очередь. Не стоит полностью пробегать по всему 3х-мерному массиву, выискивая помеченные ячейки шагом k-1, чтобы сделать пометку в k шагов, такое решение может не пройти по времени в силу данных ограничений. Поиск в глубину здесь еще более неразумен.
| |