└── README.md /README.md: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | int next_permutation(int n, char **s) 6 | { 7 | 8 | int k = -1; 9 | for (int i = 0; i < n-1; i++) { 10 | if (strcmp(s[i], s[i+1]) < 0) 11 | k = i; 12 | } 13 | if (k == -1) return 0; 14 | 15 | int l = -1; 16 | for (int i = k+1; i < n; i++) { 17 | if (strcmp(s[k], s[i]) < 0) 18 | l = i; 19 | } 20 | 21 | char *tmp = s[k]; 22 | s[k] = s[l]; 23 | s[l] = tmp; 24 | 25 | int i = k+1, j = n-1; 26 | while (i < j) { 27 | tmp = s[i]; 28 | s[i++] = s[j]; 29 | s[j--] = tmp; 30 | } 31 | 32 | return 1; 33 | } 34 | 35 | int main() 36 | { 37 | char **s; 38 | int n; 39 | scanf("%d", &n); 40 | s = calloc(n, sizeof(char*)); 41 | for (int i = 0; i < n; i++) 42 | { 43 | s[i] = calloc(11, sizeof(char)); 44 | scanf("%s", s[i]); 45 | } 46 | do 47 | { 48 | for (int i = 0; i < n; i++) 49 | printf("%s%c", s[i], i == n - 1 ? '\n' : ' '); 50 | } while (next_permutation(n, s)); 51 | for (int i = 0; i < n; i++) 52 | free(s[i]); 53 | free(s); 54 | return 0; 55 | --------------------------------------------------------------------------------