对输入的n个数做全排列
样例输入
3
1 2 3
输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

1 /* 2 1...n全排列,不计算是否有重复 3 */ 4 #include<cstdio> 5 #include<string.h> 6 using namespace std; 7 const int maxn = 100; 8 9 int rcd[maxn],num[maxn],vis[maxn]; 10 int n; 11 12 int input(){ 13 if(scanf("%d",&n)==EOF) 14 return 0; 15 memset(vis,0,sizeof(vis)); 16 for(int i=0;i<n;i++) 17 scanf("%d",&num[i]); 18 return 1; 19 } 20 21 22 void full_permutation(int l){ 23 int i; 24 if(l==n){ 25 for(int i=0;i<n;i++){ 26 printf("%d",rcd[i]); 27 if(i<n-1) 28 printf(" "); 29 } 30 printf(" "); return ; 31 } 32 for(int i=0;i<n;i++){ 33 if(!vis[i]){ 34 rcd[l]=num[i]; 35 vis[i]=1; 36 full_permutation(l+1); 37 vis[i]=0; 38 } 39 40 } 41 } 42 43 int main(){ 44 while(input()) 45 full_permutation(0); 46 return 0; 47 }