1 #include <stdio.h> 2 #include <stdlib.h> 3 4 // 数组a用来保存一种排列,也就是说100以内数(不包括100)的排列 5 int a[100], n, count = 0; 6 // 交换数组中的两个元素 7 void swap(int t1, int t2) 8 { 9 int temp; 10 temp = a[t1]; 11 a[t1] = a[t2]; 12 a[t2] = temp; 13 } 14 // 用来输出一种排列 15 void output() 16 { 17 int j; 18 printf("\n"); 19 for(j = 1; j <= n; ++j) 20 printf("%d ", a[j]); 21 ++count; 22 } 23 void try(int t) 24 { 25 int j; 26 if(t > n) 27 output(); 28 else 29 for(j = t; j <= n; ++j) 30 { 31 swap(t, j); 32 try(t + 1); 33 // 回溯时,恢复原来的排列,注意回溯的位置 34 swap(t, j); 35 } 36 } 37 // 该算法的时间复杂度为O(n!) 38 // 输出整数n的全排列 39 int main() 40 { 41 int i; 42 printf("Please input permutation number :\n"); 43 scanf("%d", &n); 44 for(i = 1; i <= n; ++i) 45 a[i] = i; 46 try(1); 47 printf("\ncount = %d", count); 48 return 0; 49 }
当你发现自己属于大多数人这边的时候,都该停下来反思一下
时间: 2024-11-11 22:32:10