На сайте acmp.ru добавились 300 новых задач, и сейчас самое время их решить. И снова задача на графы, и снова маленькие ограничения, поэтому можно легко решить на Python. Почему на графы? Потому что можно представить, что каждое состояние на доске - это вершина граф, а возможные ходы из этого состояния - рёбра. В таком представлении получаем, что надо найти длину кратчайшего пути между двумя вершинами графа. Для этого можно использовать поиск в ширину (BFS), потому что граф не взвешенный. Для начала поймём, как будем хранить состояния. Для оптимальности с точки зрения времени и памяти надо каждое состояние кодировать каким-то числом. Но при таких ограничениях в этом нет нужды, поэтому будем хранить одной строкой из 9 символов, просто склеив строки доски. И сразу после этого можно запустить bfs: Здесь всё стандартно: есть очередь на обработку, есть словарь used, в котором храним результат для всех обработанных вершин, и для каждой следующей вершины проверяем всех её соседей. А соседей н