输入整数n,按照从小到大顺序给出所有排列:
n=3则全排列为(从小到大):
123
132
213
231
312
321
采用递归思想:
先输出所有以1开头的序列----->再输入以2开始的排列------>接着是以3开始的。。。。最后是以n开始的序列。分析题意可知,
以i(i=1,2,3...n)开始的序列,后面是1,2,。。。,i-1,i+1,。。。n数字的排列,并且也是按照从大到校。在完成后面是1,2,。。。,i-1,i+1,。。。n数字的排列后再加上前面的i输出即可
思路:
void print_per(序列A,集合S){
if(S为空)输出A
else{
for (i=1;i<=n;i++)
{
如果i不在以排序序列A中 在A末尾加上i并进入一次迭代
}//从小到大依次考虑
}
}
void print_permutation(int *a,int n,int index){
int i,j;
if(index==n){for(i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;}
else {
for(i=1;i<=n;i++){
int f=0;
for(j=0;j<index;j++)
if(a[j]==i)f=1;
if(f==0){a[index]=i;print_permutation(a,n,index+1);}
}
}
}//index 为待确定元素在数组a中位置