Кусочки жизни




Олимпиада .Задание №2 Решение Первая идея, которая пришла мне в голову - рекурсивное решение. Идея неправильная (было установлено опытным путем - полный перебор жутко тормозная вещь). Вторая идея это нерекурсивный флуд (заливка) всего поля. Заполним всю доску кодом 255 (чтоб не путаться). От начальной позиции (присвоим этой клетке на доске значение 0) во все возможные позиции, на которые конь может переместиться за один ход, ставим 1. Затем сканируем всю доску, как только нашли значение 1 во все возможные клетки, куда конь может сходить ставим 2, но это только в том случае, если там стоит 255, т.е. конь там еще не был, иначе получится не кратчайший маршрут. Повторяем сканирование для 2, 3 и т.д. до тех пор, пока в одной из свежезаполненных клеток не найдем ту клетку, где находится вкусная трава. Если это произошло, то выводим значение из этой клетки - кратчайшее расстояние до позиции коня. Теперь перейдем ко второму вопросу (можно, значит нужно). Заведем массив для хранения координат коня размерностью 64 (а вдруг долго топтаться будет). Вот теперь-то нам и пригодится рекурсия. От конечной позиции (где растет трава) проверяем все возможные клетки, откуда туда мог прийти конь (на 1 меньше чем кол-во ходов итоговое). Как только найдем, занесем в элемент массива с номером, равным итоговому количеству ходов коня его координаты, затем уменьшаем счетчик, изначально равный количеству ходов коня до клетки с травой, на 1. Запускаем рекурсивную процедуру для позиции, откуда пришел конь и т.д. В конце (когда дойдем до клеточки со значением 1 - первый ход) выводим все содержимое массива.

Комментариев нет:

Отправить комментарий