依据给定的int型数组,给出全排列
比方:
[1,2] => [[1,2],[2,1]
[1,2,3] =>[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
#include <stdio.h>#include <stdlib.h>int *concat(int* list, int length, int x) { int *result = (int*)malloc((length + 1) * sizeof(int)); for (int i = length; i > 0; i--) { result[i] = list[i - 1]; } result[0] = x; return result;}int getFactorial(int n) { int total = 1; for (int i = 1; i <= n; i++) { total *= i; } return total;}int** getPermutation(int * list ,int n) { int** result; int total = getFactorial(n); if (n == 2) { result = (int**)malloc(total * sizeof(int*)); for (int i = 0; i < total; i++) { result[i] = (int*)malloc(n * sizeof(int)); } result[0][0] = list[0]; result[0][1] = list[1]; result[1][0] = list[1]; result[1][1] = list[0]; return result; }else{ result = (int**)malloc(total * sizeof(int*)); for (int i = 0; i < n; i++) { int* tempList = (int*)malloc((n - 1) * sizeof(int)); int curIdx = 0; for (int j = 0; j < n; j++) { if (i == j) continue; tempList[curIdx] = list[j]; curIdx++; } int** tempResult = getPermutation(tempList, n - 1); int tempResultLength = getFactorial(n - 1); for (int k = 0; k < tempResultLength; k++) { result[tempResultLength * i + k] = concat(tempResult[k], n - 1, list[i]); } free(tempList); free(tempResult); } return result; }}int main() { int n =4; int* p = (int*)malloc(n * sizeof(int)); for (int i = 0; i < n; i++) { p[i] = i + 1; } int **result = getPermutation(p,n); for (int i = 0; i < getFactorial(n); i++) { for (int j = 0; j < n; j++) { printf("%d,", result[i][j]); } printf("\n"); } free(p); free(result); return 0;}