这个方法 是超神教我的 --- 全排列的方法太多种了 感觉他这种写的 字典序法 是最简单的 最容易让人接受的
而且在时间复杂度和空间复杂度上 都可以让人接受
我待会将具体每步做法简要写一下...-> 我现在被一个 三角形给 深深烦死了 。。。。。。贴个代码 来 缓解下.....
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int arr[30]; 6 const int inf = 0x3f3f3f3f; 7 8 int main() 9 { 10 int n , temp; 11 int t; 12 int i , j , k; 13 while( ~scanf("%d",&t) ) 14 { 15 while( t-- ) 16 { 17 scanf( "%d",&n ); 18 for( i = 0 ; i<n ; i++ ) 19 { 20 scanf( "%d",&arr[i] ); 21 } 22 sort( arr , arr+n ); 23 while(1) 24 { 25 int mmin = inf; 26 for( i = 0 ; i<n ; i++ ) 27 { 28 printf( "%d%c",arr[i],(i==n-1)?'\n':' ' ); 29 } 30 for( i = n-1 ; i>=1 ; i-- ) 31 { 32 if( arr[i]>arr[i-1] ) 33 { 34 temp = arr[i-1]; 35 k = i-1; 36 break; 37 } 38 } 39 if( i<=0 ) 40 break; 41 for( i = n-1 ; i>k ; i-- ) 42 { 43 if( arr[i]>arr[k] && arr[i]<mmin ) 44 { 45 mmin = arr[i]; 46 j = i; 47 } 48 } 49 swap( arr[j] , arr[k] ); 50 for( i = k+1 , j = n-1 ; i<j ; i++ , j-- ) 51 { 52 swap( arr[i] , arr[j] ); 53 } 54 } 55 printf( "\n" ); 56 } 57 } 58 return 0; 59 }
today:
世间最美 不过 残缺美
所以 留点遗憾 是件很美的事