당신이 처리하고자하는 퍼즐이 당신이 링크 한 사진이라면, 바닥에있는 길을 찾을 때까지 가능한 해결책 트리를 검색하는 것이 아마도 가능할 것입니다.
각 퍼즐 조각이 얼굴에 부착 된 여러 큐브 인 경우 각 큐브에 각 조각을 맞추어서 퍼즐을 해결하려면 각 큐브에 4 번씩 구성 큐브를 넣은 다음 다음과 같습니다.
각 조각의 임의의 큐브를 원점으로 선언하십시오. 각 퍼즐 조각에 대해 가능한 24 개의 회전이 있음을 관찰하십시오. 원점 큐브의 가능한 각면에 대한 방향 중 하나가 위쪽을 향하게하고, 그 위치에서 수직 축을 중심으로 4 번 회전 할 수 있습니다.
같은 회전을하고 원본 큐브를 조각의 다른 큐브로 변환 한 후 동일한 최종 조각을 생성 할 수있는 방향을 찾아 검색 공간을 제거하려고 시도하면 완전히 동일한 점유 공간이됩니다 이전에 고려한 회전으로 볼륨, 미래 고려에서 회전 회전합니다.
가방에서 물건을 꺼냅니다. 가방에 조각이 없으면 해결책입니다. 용액 부피의 각 셀과 각 셀의 당긴 조각의 각 회전을 반복합니다.조각이 검색 량 안에 완전히 들어 있고 다른 조각과 겹치지 않으면이 단락을 반복하십시오. 그렇지 않으면 다음 회전으로 진행하거나 더 이상 회전이 없으면 다음 셀로 이동하거나 더 이상 셀이 없으면 해결 방법없이 돌아옵니다.
마지막 단락이 솔루션없이 반환되면 퍼즐을 풀 수 없습니다.
질문의 이미지보다 큰 문제의 경우, 분기 생성을 위해 더 나은 (그리고 명시적인) 가지 치기 전략이 필요합니다. 서술 된 바와 같이, 상태 공간은 sum_ {i = 1}^조각 (i * 목표의 양 * 6 [회전])이고, "직접 도달 할 수있는"상태를 생성하는 데 소비되는 시간은 적어도 다른 크기의 순서가 될 것이다. 볼륨 충돌 탐지 등을 수행 할 수 있습니다. 또한 BFS 대신 DFS가 도움이 될 수 있습니다. – p00ya
BFS의 포인트는 주에 "최단 경로"를 제공한다는 것입니다. DFS는 해당 상태에 도달 한 첫 번째 분기를 선택합니다. 반드시 가장 짧은 분기는 아닙니다. – Edward