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

问题描述 投票:-3回答:2

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

我有这样的数组。它可以具有任意长度的行和cols,但是cols的长度对于每一行都是固定的。

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

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

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

a
ac
ace
acf
ad
ade
adf
b
bc
bce
bcf
bd
bde
bdf
c
ce
cf
d
de
df
e
f

格式化:

a, b, c, d, e, f

ac, ad, bc, bd, ce, cf, de, df

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

我该如何完成?算法描述就足够了,但是代码示例(最好是C ++)将对我有很大帮助。我了解recursion循环存在for气味,但我无法正确执行。

c++ algorithm combinations combinatorics
2个回答
0
投票

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

  • 对于第一级,您将拥有角色
  • 第二级,您在每对相邻行之间进行笛卡尔乘积运算(对于循环,容易进行2运算)
  • 第三级:对于第二级中的每个结果,对相邻两行之后的行进行笛卡尔乘积

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


0
投票

您的示例算法是:

function rec(str, array, level)
    if level = array.size()
        print str
    endif
    for i in array[level]
        rec(concat(str, i), array, level + 1)
    endfor
© www.soinside.com 2019 - 2024. All rights reserved.