Если головоломка, которую вы хотите обработать, состоит в том, что на фотографии, которую вы связали, тогда, вероятно, можно просто обыскать дерево возможных решений, пока не найдете свой путь на дно.
Если каждый кусочек головоломки представляет собой несколько кубов, прикрепленных к их лицам, и я должен решить головоломку, подгоняя каждую куску в более крупный куб, по 4 раза на каждом краю в качестве составных кубов, затем я буду продолжать следующим образом.
Объявите произвольный куб каждой части как ее начало. Обратите внимание на то, что для каждой головоломки имеется 24 возможных вращения, одна ориентация для каждой возможной грани начального куба направлена вверх, раз 4 возможных вращения вокруг вертикальной оси в этом положении.
Попытка отбирать пространство для поиска путем поиска возможных ориентаций, которые производят одну и ту же конечную деталь, если заданное вращение, за которым следует перевод исходного куба на любой из других кубов куска, приводит к точно такой же занимаемой объем как ранее рассмотренное вращение, отбросить это вращение от будущего рассмотрения.
Вынуть кусок из сумки. Если в сумке нет кусочков, это решение. Проведите через каждую ячейку объема раствора и каждое вращение выталкиваемой детали для каждой ячейки.Если деталь полностью находится внутри объема поиска и не пересекается с какой-либо другой частью, запишите этот параграф. В противном случае перейдите к следующему вращению или если больше нет вращений, перейдите к следующей ячейке или, если больше нет ячеек, вернитесь без решения.
Если последний абзац возвращается без решения, головоломка была неразрешимой.
Для больших проблем, чем изображение вопроса, вам понадобятся лучшие (и явные) стратегии обрезки для генерации ветвей. Как уже говорилось, пространство состояний: sum_ {i = 1}^штук (i * объем объективных * 6 [вращений]), а время, затрачиваемое на создание «непосредственно достижимых» состояний, будет по меньшей мере на порядок громкость для обнаружения столкновения и т. д. Также может помочь DFS вместо BFS. – p00ya
Точка BFS - это «кратчайший путь» к состоянию. DFS выберет первую ветвь, которая попадает в это состояние, не обязательно кратчайшую. – Edward