Hľadám algoritmus (alebo C-likeimplementácia, žiadne dostupné nástroje), ktoré generuje všetky n-tice [a_0 a_1 ... a_ (n-1)] tak, že 0 <= a_i <= i + 1. Ukazovatele v literatúre sú tiež vítané.
odpovede:
3 pre odpoveď č. 1niečo také?
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 pre odpoveď č. 2
Je to nazývané "backtracking", hľadanie wikipedia o tom, môžete to urobiť rekurzívne alebo iteračné.
Amir, chce medzi 0 a i + 1, nie medzi 0 a i. A myslím, že prechádzajúce polia na stack je pomalšie, než aby sa k nim dostali ako globálne.
Myslím, že chcete niečo takéto:
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);
}
}