0

可能重复:
如何从可变数量的可变长度数组中找到由 1 个元素组成的所有排列?

假设我有 n 个包含如下元素的数组

 a1 -> e11,e12,e13

 a2 -> e21,e22,e23,e24,e25

 a3 -> e31,e32

 a4 -> e41,e42,e43,e44

 ...

 an -> en1,en2,en3,en4,en5,en6

我想从上面的每个数组中获取所有可能的排列,其中包含 n 个元素。

对于 exm。

 e11,e21,e31,e41.........,en1

 e13,e25,e32,e41.........,en6

等等...

建议我一个有效的方法,如果可能的话,用 Java 或 C 编写代码片段。

4

2 回答 2

0

由于您对所有数组组合感兴趣,因此这里的 For 循环会很棒这是一个解决方案(应针对语法进行修改以使其正常工作)

int i = 0
int j=0
int k =0

while(i<arraylength(a1))
{
while (j < arraylength(a2))
{
//and so  till an
print a1[i],a2[j];
j++;
}
i++;
}
于 2013-01-29T13:55:27.780 回答
0

您可以使用以下伪代码:

获得下一个排列的函数:

function NextPermutation(int[] current)
{
    current[0] = current[0] + 1;
    int pointer = 0;
    while(pointer <= n && current[pointer] == limit[pointer])
    {
        current[pointer] = 0;
        pointer = pointer + 1;
        current[pointer] = current[pointer] + 1;
    }
}

预人口代码:

    int[] limit = new int[n + 2];
    int[] current = new int[n + 2];
    limit[1] = a1.length;
    ...
    limit[n] = an.length;

    while(current[n+1] == 0)
    {
        Print(current);
        NextPermutation(current);
    }

current数组包含数组的索引a1, a2, ... , an

于 2013-01-29T12:17:24.993 回答