枚举排列

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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值