Цитата (brevis @ 8.11.2019 - 16:37) |
Цитата (Vanzai @ 8.11.2019 - 16:33) | Не совсем то, конь должен пройти по ВСЕМ кнопкам за минимальное кол-во ходов... |
"по ВСЕМ кнопкам" да еще и "при условии, что на каждую кнопку конь станет единажды" -- ходов будет всегда столько, сколько кнопок.
|
Да,согласен,вначале неправильную постановку дал, мой косяк
Цитата (brevis @ 8.11.2019 - 16:39) |
Цитата (Vanzai @ 8.11.2019 - 16:33) | И как я должен был со своим трёхнедельным опытом написать то, что вижу выше |
Менторство платное? |
Нет, сейчас я занимаюсь 1с-ом, а ему нужен помощник по php, сказал, что если сделаю, то заберёт меня, но, видимо, пролетаю, как фанера над Парижем
Понятно. Задача действительно хитрая, но не сказать чтобы сильно интересная. Поэтому давайте решать ее не для мобильного телефона, а для произвольного поля m*n. Конкретно для клавиатуры мобильного телефона можно посчитать хоть на бумажке. Думаю быстрее получится, чем писать даже самую топорную реализацию, честное слово.
Итак, как ходит конь всем известно. Рассчитать возможные ходы из текущей точки не проблема, простой алгоритм. Если начать строить возможные комбинации из конкретно взятой стартовой точки, то получится структура данных - дерево. С вершиной как раз в координатах старта. Таких деревьев будет ровно столько, сколько клеток на поле.
Наиболее простым вариантом работы с деревьями лично мне видится через СуБД, я бы наверное взял closure table, поскольку сразу имеем возможность посчитать глубину прямо через SQL запрос. Что нам собственно и нужно: найти ветвь минимальной длинны из неповторяющихся элементов для каждого из деревьев. Затем наименьшее из них.
Да, зачада имеет довольно высокую вычислительную сложность, хотя нам не нужно каждый раз достраивать дерево до конца. =)