我想暴力攻击解决rubiks立方体的阶段。我有像U(顺时针旋转90度),L,D,F2(180度),B'已经写好了(90度ccw)等,以各种方式模拟立方体所有6个面的旋转。
现在,我想编写一个代码来解决4个问题(不应该超过8个移动长度)。我已经基于人工解决方法编写了它,但它需要太多动作。
如何通过测试n长度的每个可能移动来强制执行此部分,即D L2 RU是4个移动但我希望能够在某个情况需要超过4或5的情况下更改该变量,等
我尝试通过测试所有可能的数字组合进行递归,但我根本没有关闭。
感谢任何帮助/提示。
答案 0 :(得分:0)
循环通过一组面,然后循环旋转,并将其附加到移动集。您可以按如下方式递归执行:
char faces[] = { 'U','D','L','R','F','B' };
char rotation[] = { ' ', '2', '\'' };
void move(char movestr[], int size, int count)
{
int i, j, append;
for (i=0;i<sizeof(faces);i++) {
for (j=0;j<sizeof(rotation);j++) {
append=0;
movestr[size+(append++)] = faces[i];
if (j != 0) movestr[size+(append++)] = rotation[i];
movestr[size+(append++)] = ' ';
movestr[size+append] = '\0';
if (count > 0) {
move(movestr, size+append, count-1);
} else {
// try move
}
}
}
}
int main()
{
char movestr[100];
move(movestr, 0, 4);
}