EDIT: My solution is added at the end of the question. Thanks for the tip.
I will just give an example. Suppose I have an array of length n:
arr = { 1, 4, 8, 2, 5, ... }
If I want to go through all the combinations of two elements, I would write:
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// do something with arr[i] and arr[j]
}
}
I If I want to traverse all configurations of THREE elements, I would simply add another foriteration layer :
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
// do something with arr[i] and arr[j]
}
}
}
What if the number of elements is set by the user (say m), and we donβt know exactly what it is? What should I write then?
(I could not figure out a better name for this question. And the tags are not exact either. Help me with them if you want.)
Answer The
solution is this function:
void configurations(int depth, int* array, int length, int* indices, int curDepth) {
if (curDepth == 0) {
for (int i = 0; i < depth; i++) {
printf("%d ", indices[i]);
}
printf("\n");
return;
}
for (int i = 0; i < length; i++) {
indices[curDepth - 1] = i;
configurations(depth, array, length, indices, curDepth - 1);
}
}
:
int a[] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int configSize = 3;
int* indices = new int[configSize];
configurations(configSize, a, 9, indices, configSize);
:
0 0 0
1 0 0
2 0 0
3 0 0
4 0 0
...
5 8 8
6 8 8
7 8 8
8 8 8