繁体   English   中英

如何为字符串生成所有可能的(n个长度)子集?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM