我正在寻找一种非递归算法或C代码来生成多个集合的所有组合(不确定这是否是正确的科学名称)。例如:

我有N = 2套符号:

set 1: [A, Y, Z]
set 2: [1, Q]


输出应为:

A1
AQ
Y1
YQ
Z1
ZQ


N可以变化,与特定集合中的符号数相同。在此先感谢您的帮助! :)

最佳答案

来自以下算法:How can I compute a Cartesian product iteratively?

我们可以创建一个长度为n,int[ ] choose[n]的int数组,以跟踪在所有列表中选择了多少个元素。最初,所有元素都设置为0。

然后,我们遍历存储所有这些数组的单链接列表。如果我们已经迭代了数组ichoose[i]++中的一个元素,请将其附加到结果中。当choose [i] ==数组i的长度时,断开并移至下一个数组。

但是我不知道如何添加,因为每次我们迭代数组时,结果的大小都会扩大。

如果您知道了,请告诉我。

10-02 14:31