【发布时间】:2010-07-26 13:58:18
【问题描述】:
我正在寻找一种生成所有元组的算法(或类似 C 的实现,没有可用的 itertools) [a_0 a_1 ... a_(n-1)] 使得 0
【问题讨论】:
-
a_i 还有其他限制吗?例如 a_i >=0?
标签: algorithm tuples combinatorics
我正在寻找一种生成所有元组的算法(或类似 C 的实现,没有可用的 itertools) [a_0 a_1 ... a_(n-1)] 使得 0
【问题讨论】:
标签: algorithm tuples combinatorics
这样的?
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);
}
}
【讨论】:
这称为回溯。搜索有关它的维基百科。您可以递归或迭代。
阿米尔,他想要介于 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);
}
}
【讨论】: