В крайнем случае всегда можно генерировать уже решенную карту и двигать на ней ящики по всем правилам игры в обратном порядке. Только для интересных уровней надо будет какие-то правила дополнительные для этих ходов подобрать, что бы посложнее варианты были, а не сдвиг туда-сюда одного ящика.
А ещё можно сыпать рандом и проверять решаемость. После чего немного исправлять.