我正在寻找一种非递归算法或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。
然后,我们遍历存储所有这些数组的单链接列表。如果我们已经迭代了数组i
,choose[i]++
中的一个元素,请将其附加到结果中。当choose [i] ==数组i的长度时,断开并移至下一个数组。
但是我不知道如何添加,因为每次我们迭代数组时,结果的大小都会扩大。
如果您知道了,请告诉我。