Si le casse-tête que vous voulez gérer est celui de la photo que vous avez liée, alors il est probablement possible de simplement chercher dans un arbre des solutions possibles jusqu'à ce que vous trouviez votre chemin vers le bas. Si chaque pièce du puzzle est un nombre de cubes attachés à leurs faces, et je dois résoudre le puzzle en insérant chaque pièce dans un plus grand cube, 4 fois sur chaque bord comme les cubes de composition, alors je procéderais comme suit.
Déclarez un cube arbitraire de chaque pièce comme origine. Observez qu'il y a 24 rotations possibles pour chaque pièce du puzzle, une orientation pour chaque face possible du cube d'origine vers le haut, 4 fois les rotations possibles autour de l'axe vertical dans cette position. Tentative d'élimination de l'espace de recherche en recherchant les orientations possibles produisant la même pièce finale, si une rotation donnée, suivie d'une translation du cube d'origine vers l'un des autres cubes de la pièce, donne exactement la même occupation volume comme une rotation précédemment considérée, retirez cette rotation de la considération future.
Retirez un morceau du sac. S'il n'y a pas de pièces dans le sac, alors c'est une solution. Boucle à travers chaque cellule du volume de la solution, et chaque rotation de la pièce tirée pour chaque cellule.Si la pièce est complètement à l'intérieur du volume de recherche et ne chevauche aucun autre morceau, revenez dans ce paragraphe. Sinon, passez à la rotation suivante, ou s'il n'y a plus de rotations, passez à la cellule suivante, ou s'il n'y a plus de cellules, revenez sans solution.
Si le dernier paragraphe revient sans solution, alors le puzzle était insoluble.
Pour les problèmes plus importants que l'image de la question, vous aurez besoin de meilleures stratégies d'élagage (et explicites) pour la génération de branches. Comme indiqué, l'espace d'état est: sum_ {i = 1}^morceaux (i * volume de l'objectif * 6 [rotations]), et le temps passé à générer des états "directement joignables" sera au moins d'un autre ordre de grandeur volume pour faire la détection de collision, etc. Un DFS au lieu d'un BFS peut également aider. – p00ya
Le point de la BFS est qu'il fournira le "chemin le plus court" à un état. Le DFS choisira la première branche qui atteint cet état, pas nécessairement la plus courte. – Edward