所有可能长度的所有可能组合

时间:2019-12-13 15:55:26

标签: c++ combinatorics

所有可能长度的所有可能组合

我有这样的数组。它可以有任意长度的行和列,但是列的长度是固定的。

{
    {a, b},
    {c, d},
    {e, f}
}

我需要所有可能的长度的所有可能的组合。

所有组合,例如上面的数组的示例:

a, b, c, d, e, f

ac, ad, ae, af, bc, bd, be, bf, ce, cf, de, df

ace, acf, ade, adf, bce, bcf, bde, bdf

我该怎么做? 算法描述就足够了,但是代码示例(最好是C ++)将对我有很大帮助。我知道有recursion个循环的for气味,但是我做得不好。

2 个答案:

答案 0 :(得分:1)

您可以按级别进行操作,作为描述中的格式化输出。

  • 对于第一个级别,您将拥有角色
  • 第二级,您在每对相邻的行之间进行笛卡尔乘积运算(对于循环来说则是2)
  • 第三级:对于第二级中的每个结果,执行笛卡尔乘积,并在相邻两行之后添加行

依此类推,直到第N级,其中N是行数

答案 1 :(得分:-1)

您的示例算法是:

function rec(str, array, level)
    if level = array.size()
        print str
    else
        for i in append(array[level], "")
            rec(concat(str, i), array, level + 1)
        endfor
    endif

您将从

开始
rec("", {{a, b},{c, d},{e, f}}, 0)