Вы не сказали, проверяете ли вы это или нет, но похоже, что вы не сокращаете циклы.
Во-первых, предположим, что вместо того, чтобы представлять движения как перемещение пустого квадрата в каком-то направлении, вы вместо этого указали номер плитки, который был перемещен. (Он гарантированно будет уникальным.) Теперь предположим, что допустимым шагом является «3» - перемещение плитки № 3 в пустое пространство. Результатом является новый макет платы. Правильный ход оттуда - снова переместить тайл 3, и теперь вы вернулись туда, откуда начали.
Головоломки слайдера могут легко иметь большие циклы. Если есть сетка 2x2 с 1-2-3-пустым в ней, то допустимая последовательность ходов 1-2-3-1-2-3-1-2-3-1-2-3 - которая отправляет вам вернуться к началу.
Если ваш поиск не проверяет и не удаляет дублирующиеся доски, поиск в ширину все равно будет прерван (при условии, что ошибок нет, и нет ошибки четности (?), Делающей вашу доску неразрешимой) - существует правильное решение, которое заключается в том, что Если длина N равна ходу, и вам потребуется определенное время для обработки каждой последовательности K ходов, так что в конечном итоге вы получите N и ваше решение. Однако время для каждой длины хода увеличивается в геометрической прогрессии (до 4 ходов с каждой доски). Вы, вероятно, бьетесь в памяти.
К сожалению, подход грубой силы к проверке дублированных состояний платы заключается в сохранении каждой платы по мере ее поступления, что также будет занимать память быстро, хотя, возможно, не так быстро, как ваш текущий метод. На самом деле это может быть удовлетворительно для простой доски 5х5.