В отсутствие дальнейшего понимания я бы сделал это как поиск по графику.
Каждое игровое состояние представляет собой массив стеков. Обратите внимание, что для равенства
второй и третий стек являются взаимозаменяемыми, поэтому следующее должно быть
считается одинаковым:
((1 3 5)
(2 4)
(7 9)
(0))
((1 3 5)
(7 9)
(2 4)
(0))
Граф является ориентированным ациклическим графом. Вершины - это игровые состояния,
и края движутся.
Алгоритм состоит в том, чтобы создать этот граф, начиная с заданного первого
состояние, но обрезать все состояния, которые не могут привести к целевому состоянию, и
объединить все состояния, которые одинаковы (для этого нужно идти
в ширину).
Состояния, которые не могут привести к целевым состояниям, являются состояниями
- , где последний стек содержит не только самые низкие числа в порядке возрастания, либо
- , где один из переходных стеков находится не в порядке убывания.
Возможны дополнительные ограничения. В частности, я не уверен
нет ли способа определить результат из заказа в
первый стек напрямую (что сделало бы этот алгоритм
лишний).