Я не уверен, что назвать этой проблемой, но я уверен, что у нее есть имя. В противном случае найти ответ было бы проще.Прохождение каждой возможной ячейки в 2D-массиве
Учитывая "карту" клеток, таких как:
O - - -
- X - -
- X X -
- - - -
где O = исходное положение, X = препятствие и - = заходило. Я хочу пройти эту карту (которую я сохранил как 2D-массив) и посещать как можно больше ячеек, не касаясь посещенной ячейки.
Мой алгоритм выглядит следующим образом:
- Если я могу пойти направо, ехать прямо.
- Иначе, если я могу спуститься вниз, спуститесь.
- Else, если я могу пойти влево, идите налево.
- Else, если я могу подняться вверх, поднимитесь.
- Если я застрял, вернуться назад и отметьте, что ячейка «unvisitable», и вернуться к 1.
Так две проблемы:
- Для больших карт, количество препятствий, и где они размещаются часто заставляет мой алгоритм не доходить до многих ячеек. Я пробовал разные порядки 1-4 (т. Е. Всегда поднимался, если мог, и т. Д.), Но это, очевидно, зависит от данной карты.
- Я не знаю, когда остановиться. Если мой алгоритм достигает «конца», т. Е. Я действительно посещал каждую возможную ячейку, он не останавливается и просто возвращается назад к началу.
Итак, мой вопрос, я думаю, есть: есть ли лучший способ реализовать это, или как мне настроить текущий алгоритм, чтобы исправить это?
Извините, что не ответил. Мне нужно будет это проверить. Как я уже сказал в другом ответе, я немного изменил свой алгоритм. Таким образом, в основном то, что я делаю сейчас, это сделать один обход, чтобы в конечном итоге посетить каждую ячейку, чтобы найти самый длинный стек перемещения. Как только мы посетили каждую ячейку, я просто перебираю стек перемещения и двигаюсь в соответствии с ним. – cloudbells