Lec5-输出全排列问题

分析:

设R= {r1,r2,r3,……,rn}是要进行排列的n个元素,Ri=R-{ri}。集合X中的元素的全排列记为perm(X).(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀ri得到的排列,R的全排列可归纳定义如下:

当n=1,perm(R) = (r) ,其中r是集合R中唯一的元素。

当n>1,perm(R)由(r 1)perm(R 1),(r 2)perm(R 2),……,(r n)perm(R n)构成。

#include  < iostream >
using   namespace  std;

void  swap( int  a[],  int  i,  int  j)
{
     
int  temp  =  a[i];
     a[i] 
=  a[j];
     a[j] 
=  temp;
}

void  perm( int  a[],  int  start,  int  end)
{
      
int  i;
      
if (start  ==  end)
      {
         
for (i  =   0 ; i  <=  end; i ++ )
            cout 
<<  a[i]  <<   "   " ;
         cout 
<<  endl;
      }
      
else
        {
            
for (i  =  start; i  <=  end; i ++
            { 
                 swap(a,start,i);
                 perm(a,start 
+   1 ,end);
                 swap(a,start,i);      
            }    
        }
}

int  main( void )
{
    
    
int  a[ 3 =  { 1 , 2 , 3 };
    perm(a,
0 , 2 );
    
    system(
" pause " );
    
return   0 ;    
}

转载于:https://www.cnblogs.com/avril/archive/2011/05/04/2036643.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值