[英]How can I generate all possible (n-length) subsets for a string?
我想用蛮力攻击解决魔方的一个阶段。 我已经编写了一些函数,例如U(向上旋转dace顺时针旋转90度),L,D,F2(180度),B'(逆时针90度)等,可以模拟立方体的所有6个面在每种可能情况下的旋转方式。
现在,我想编写一个代码来解决4个问题(不应该超过8个步长)。 我已经基于人类解决方法编写了它,但是它采取了很多动作。
我如何通过测试n个长度的每个可能的移动来蛮力地打这部分,即D L2 RU是4个移动,但是我希望能够更改该变量,以防某些情况下花费的时间超过4或5,等等。
我尝试通过测试所有可能的数字组合来进行递归,但我一点儿也没有。
任何帮助/提示表示赞赏。
遍历一组面,然后遍历旋转,并将其附加到移动集中。 您可以按以下方式递归执行:
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.