所以这个函数只是在数组之间进行交换。 r
是数组i
的长度,l
是要更改的索引。它给了我一个错误EXC_BAD_ACCESS(Code=1)
。
void swap(int a[], int first, int second, int r) {
int tempp = a[first];
a[first] = a[second];
a[second] = tempp;
}
此函数生成数组的排列。
void permute(int a[], int l, int r) {
int temp[r];
int i;
if (l == r)
for (int k = 0; k < r; k++) {
printf("%d\n", a[k]);
}
else {
for (i = l; i <= r; i++) {
swap(a[r], l, i, r);
permute(a[r], l + 1, r);
swap(a[r], l, i, r);
}
}
}
因此函数接收来自main的输入,并根据某些要求创建一个数组。
void perm_rec_1(int N, int nr_vals) {
int a[N], temp = nr_vals - 1;
int output[N];
for (int i = 0; i < N; i++) {
if (i >= nr_vals) {
a[i] = temp;
continue;
} else {
a[i] = i;
}
}
int i;
for (int i = 0; i < N; i++) {
printf("%d", a[i]);
}
permute(a[N], 0, (nr_vals) - 1);
}
答案 0 :(得分:0)
解决代码中的各种类型错误,以下内容编译并运行:
void swap(int a[], int first, int second) {
int temporary = a[first];
a[first] = a[second];
a[second] = temporary;
}
void permute(int a[], int l, int r) {
if (l == r) {
for (int k = 0; k < r; k++) {
printf("%d\n", a[k]);
}
} else {
for (int i = l; i <= r; i++) {
swap(a, l, i);
permute(a, l + 1, r);
swap(a, l, i);
}
}
}
void perm_rec_1(int N, int nr_vals) {
int a[N], temp = nr_vals - 1;
for (int i = 0; i < N; i++) {
if (i >= nr_vals) {
a[i] = temp;
} else {
a[i] = i;
}
}
for (int i = 0; i < N; i++) {
printf("%d", a[i]);
}
permute(a, 0, (nr_vals) - 1);
}
虽然我无法说出swap()
以外的任何内容,但我不确定它会尝试做什么。