集合的全排列问题

全排列问题的递归算法(回溯算法)

 

 1 //产生元素k~m的全排列,作为前k-1个元素的后缀
 2 void Perm(int list[],int k,int m)
 3 {
 4     //构成了一次全排列,输出结果
 5     if(k==m)
 6     {
 7         for(int i=0; i<=m; i++)
 8             cout<<list[i]<<" ";
 9         cout<<endl;
10     }
11     else
12         //在数组list中,产生元素k~m的全排列
13         for(int j=k; j<=m; j++)
14         {
15             swap(list[k],list[j]);   //swap()是标准库函数,交换两个元素的值。
16             Perm(list,k+1,m);
17             swap(list[k],list[j]);
18         }
19 }

 

列如:数组 list [] ={1,2,3,4,5,6},则调用Perm(list,0,3)就是产生元素1~4的全排列。

一般情况下,k<m。该算法将list[k:m]中的每一个元素分别与list[k]中的元素交换,然后递归地计算元素list[k+1:m]的全排列,并将计算结果作为list[0:k]的后缀。

转载于:https://www.cnblogs.com/pshw/p/4838836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值