首页 > 代码库 > TOJ---2621--全排列

TOJ---2621--全排列

这个方法 是超神教我的 --- 全排列的方法太多种了 感觉他这种写的 字典序法 是最简单的 最容易让人接受的

而且在时间复杂度和空间复杂度上 都可以让人接受

我待会将具体每步做法简要写一下...-> 我现在被一个 三角形给 深深烦死了  。。。。。。贴个代码 来 缓解下.....

 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 }
View Code

 

today:

  世间最美 不过 残缺美

  所以 留点遗憾 是件很美的事