枚举排列

来源:互联网 发布:如何查看淘宝联盟pid 编辑:程序博客网 时间:2024/06/02 13:52

输入整数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中位置


0 0
原创粉丝点击