Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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
Algorithm 生成元组模索引_Algorithm_Tuples_Combinatorics - Fatal编程技术网

Algorithm 生成元组模索引

Algorithm 生成元组模索引,algorithm,tuples,combinatorics,Algorithm,Tuples,Combinatorics,我正在寻找一种生成所有元组的算法(或类似C的实现,没有可用的itertools) [a_0 a_1…a_(n-1)]这样0像这样吗 void printTuples (int n, int[] a, int i=0) { if (i == n) { //print a return; } for (int j=0; j<=i+1; j++) { a[i] = j; printTuples (n, a,

我正在寻找一种生成所有元组的算法(或类似C的实现,没有可用的itertools) [a_0 a_1…a_(n-1)]这样0像这样吗

void printTuples (int n, int[] a, int i=0) {
    if (i == n) {
        //print a
        return;
    }
    for (int j=0; j<=i+1; j++) {
        a[i] = j;
        printTuples (n, a, i+1);
    }
}
void打印元组(int n,int[]a,int i=0){
如果(i==n){
//打印
返回;
}

对于(intj=0;j这叫做回溯。搜索维基百科。你可以递归或迭代地进行

Amir,他想要的是介于0和i+1之间,而不是介于0和i之间。我认为在堆栈上传递数组比将数组作为全局数组传递要慢

我想你想要这样的东西:

int a[YOUR_LENGTH];

void backtracking (int n, int counter) {
    if (counter == n) {
        // do whatever
        return;
    }
    for (int j = 0; j <= counter + 1; ++ j) {
        a[counter] = j;
        backtracking(n, counter + 1);
    }
}
inta[你的长度];
无效回溯(整数n,整数计数器){
如果(计数器==n){
//做任何事
返回;
}

对于(int j=0;j)a_i是否有其他限制?例如a_i>=0?您需要此解决方案a[0]我接受答案,因为它对我有帮助。谢谢!但是解决方案不正确。您的函数给出(对于n=3)00000 100201010011012。@约翰,你在修复后试过吗?现在试过我的,它给出00000 100200301010101201302002102220231001102103110111112113120121122123I修复了通常最好避免全局。这是回溯,使用全局可能赢得的几毫秒肯定不值得。Teodor,你放弃了ot将Amir解决方案中的“i”替换为“counter”,不是吗?谢谢您提供的“backtracking”信息。嗯,我知道,我是一个令人头疼的人,但仍然有一个“i”…和一个缺少的“}”。但当我超过SO规定的15分限制时,我会给你一分。