Здраствуйте. На задачи из прошлого выпуска, почти никто не прореагировал.
Поэтому, я думаю разбирать их нет смысла.
Этот выпуск получился коротким и лёгким для понимания. Я решил в
этот раз на время оставить сортировки и рассмотреть одну довольно известную
задачу.
Алгоритмы с возвратом.
Обычно, но не всегда, алгоритмы действует по чётко заданным
правилам. Бывают такие задачи, в которых мы должны действовать методом
проб и ошибок. Для примера рассмотрим классическую задачу на
эту тему: необходимо конём обойти шахматную доску размером NxN, не побывав
на одном поле дважды.
Пусть конь стоит в позиции (X0, Y0). Из этого поля мы можем сделать
0..8 ходов. Если количество возможных ходов равно 0, то либо мы получили
ответ, либо ветвь, по которой мы пошли, привела нас в тупик. Если нам
есть куда ходить, то выбрав какой-нибудь из возможных вариантов и оказавшись
на другом поле наша задача повторяется.
Видно, что задача легко сводится к рекурсии. Полезнее всего будет
посмотреть код.
Дерево решений в этой задачи растёт очень быстро. Появлению решения
предшествует большое количество ошибочных проходов. Можно сделать появление
решения более вероятным при помощи простой эвристики: на очередном ходе
надо идти на то поле, из которого можно сделать наименьшее количество
ходов. Вот её реализация: