题目描述
要求计算从1到N的N个整数所能构成的所有排列,并按照字典顺序依次输出。
输入
输入为一组整数,每行为一个整数N,N<8,结尾行为0。
输出
对每一个输入N,按照字典序输出1到N的所有排列,数字中间用空格隔开,
每个排列的输出占一行。
样例输入
2
3
0
样例输出
1 2
2 1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
代码如下:
1 #include<iostream> 2 using namespace std; 3 4 void QPL(int *a,int k,int n) 5 { 6 if(k==n) 7 { 8 for(int i=0;i<n;i++) 9 cout<<a[i]<<" "; 10 cout<<endl; 11 } 12 for(int i=0;i<n;i++) 13 { 14 int isok=1; 15 for(int j=0;j<k;j++) 16 { 17 if(a[j]==i+1) 18 { 19 isok=0; 20 break; 21 } 22 } 23 if(isok==1) 24 { 25 a[k]=i+1; 26 QPL(a,k+1,n); 27 } 28 } 29 } 30 void init(int *a,int n) 31 { 32 for(int i=1;i<=n;i++) 33 a[i-1]=i; 34 } 35 int main() 36 { 37 int N; 38 while(cin>>N) 39 { 40 int a[N]; 41 init(a,N); 42 QPL(a,0,N); 43 } 44 return 0; 45 }