Эта проблема в основном сводится к выполнению стандартного алгоритма тасования с небольшим поворотом.
Ключевое наблюдение состоит в том, что для решения 15-пазла четность перестановки и четность пустого квадрата должны быть одинаковыми.
Сначала создайте случайную перестановку, используя для этого стандартный алгоритм. Например, алгоритм Кнута тасования: Случайные перестановки
Преимущество использования тасования Кнута (или тасования Фишера-Йейтса) заключается в том, что оно включает в себя обмен числами, что позволяет легко отслеживать четность перестановки. Каждый своп либо сохраняет паритет (если вы поменяли местами 1 и 3), либо изменяет паритет (если вы поменяли местами 1 и 2).
Поместите пустой квадрат в ту же четность, что и четность перестановки, и все готово.
Если перестановка имеет нечетную четность, тогда поместите пробел в нечетный квадрат (1,3,5, ... выбранный случайным образом). Если перестановка имеет четную четность, поместите пробел на четный квадрат.