我正在寻找一种非递归算法或C代码来生成多组的所有组合(不确定这是否是正确的科学名称)。例如:
我有N = 2组符号:
set 1: [A, Y, Z]
set 2: [1, Q]
输出应为:
A1
AQ
Y1
YQ
Z1
ZQ
N可以变化,与特定集合中的符号数量相同。在此先感谢您的帮助! :)
答案 0 :(得分:0)
算法来自:How can I compute a Cartesian product iteratively?
我们可以创建一个int数组,其长度为n int[ ] choose[n]
,以跟踪我们在所有列表中选择的元素数量。最初将所有元素设置为0。
然后我们遍历存储所有这些数组的单链表。如果我们迭代了数组i
中的元素choose[i]++
,请将其附加到结果中。当选择[i] == array i的长度时,然后中断并继续下一个数组。
但我不知道如何进行追加,因为每次迭代数组时,结果的大小都会被扩展。
如果您已经知道了,请告诉我。