Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一种寻找包含可变元素数的可变数组排列的有效方法_Java_C_Algorithm_Permutation_Combinations - Fatal编程技术网

Java 一种寻找包含可变元素数的可变数组排列的有效方法

Java 一种寻找包含可变元素数的可变数组排列的有效方法,java,c,algorithm,permutation,combinations,Java,C,Algorithm,Permutation,Combinations,可能重复: 假设我有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..

可能重复:

假设我有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语言编写代码片段。

您可以使用以下伪代码:

函数以获取下一个排列:

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;
    }
}

current
数组将索引包含到数组中
a1、a2、,一个

,因为您对循环的所有数组组合都感兴趣,所以在这里非常好 下面是一个解决方案(应该针对语法进行修改以使其正常工作)

inti=0
int j=0
int k=0

而(iI)将递归地循环每个组合。这是简单而有效的。
    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);
    }
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++;
}