Это пример ввод-вывод моего исходного кода генерации перестановки алфавиты строкиКак я могу изменить строку позиции листа путем рекурсивной перестановки в C?
Input:
1
3 8
Output:
Case 1:
ABC
ACB
BAC
BCA
CBA
CAB
Мне нужно получить CAB
в строке 5 и CBA
в строке 6 этого выход, но я не знаю, как это сделать Это.
Вот то, что я до сих пор:
#include <stdio.h>
int N, M, count;
char array[27];
void swap (char array[], int i, int j) {
char t;
t = array[i];
array[i] = array[j];
array[j] = t;
}
void perm (char array[], int n, int i) {
if(count == M)return;
int j;
if (i == n) {
for (j=0; j<n; j++) printf ("%c", array[j]);
count++;
printf ("\n");
return;
} else
for (j=i; j<n; j++) {
swap (array, i, j);
perm (array, n, i+1);
swap (array, i, j);
}
}
int main() {
int v[27], i, testCase, T;
int tmp;
char tmpC;
scanf("%d", &T);
for(testCase = 1; testCase <= T; testCase++){
scanf("%d %d", &N, &M);
for (i=0; i<N; i++){
v[i] = i+1;
tmp = i+65;
tmpC = tmp;
array[i] = tmpC;
}
printf("Case %d:\n", testCase);
count = 0;
perm (array, N, 0);
}
return 0;
}
Thanks @Black Moses для исправления формата. :) –
@Weaher Vane ... Хорошо, я согласен с вами. Но если я использую функцию swap, есть ли способ получить ожидаемый результат? –