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

All possible combinations of all possible length

本文关键字:有可能 组合      更新时间:2023-10-16

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

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

{
{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++(将对我有很大帮助。我知道for循环有recursion气味,但我不能正确地做到这一点。

您可以按级别继续作为描述中的格式化输出。

  • 对于第一关,您将拥有自己的角色
  • 第二级你在每对相邻行之间做一个笛卡尔积(简单 2 for 循环(
  • 第三级:对于第二级中的每个结果,做一个笛卡尔乘积,行跟在 2 个相邻行之后

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

示例的算法是:

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)