全排列递归算法(DFS)
#include<stdio.h>
#include<malloc.h>
void perm(int* list, int k, int n);
void swap(int* x, int* y);
void show(int* list, int n);
int main() {
int* list = (int*)malloc(3 * sizeof(int));
list[0] = 1;
list[1] = 2;
list[2] = 3;
perm(list, 0, 3);
return 0;
}
void perm(int* list, int k, int n) {
if (k == n - 1) {
show(list, n);
return;
}
for (int i = k; i < n; i++) {
swap(&list[k], &list[i]);
perm(list, k + 1, n);
swap(&list[k], &list[i]);
}
}
void swap(int* x, int* y) {
int temp = 0;
temp = *x;
*x = *y;
*y = temp;
}
void show(int* list, int n) {
for (int i = 0; i < n; i++) {
printf("%d ", list[i]);
}
putchar('\n');
}