Algorithm1: 全排列

全排列
思想:
     这是一个全排列问题,需要使用递归实现,将数组中的所有元素和第一个元素交换,求后面n-1个元素的全排列。
     按照这个条件递归下去,知道元素的个数只有一个的时候,输出所有的元素。
 
#include  <iostream>
using  namespace  std;
 
int  total = 0;
void  perm( int  arr [],  int  start  ,  int  size ){
                  if  ( start  >=  size ){
                                  for  ( int  i = 0; i <  size ; i++){
                                                cout <<  arr [i] <<  " "  ;
                                }
                                cout << endl;
                                total++;
                                  //return;
                }
                  else {
                                  for  ( int  i =  start ; i <  size ; i++){
                                                  int  temp =  arr  [ start ];
                                                  arr [ start  ] =  arr [i];
                                                  arr [i] = temp;
 
                                                perm(  arr ,  start  + 1,  size );
 
                                                temp =  arr [ start  ];
                                                  arr [ start  ] =  arr [i];
                                                  arr [i] = temp;
                                }
                }
}
 
int  main(){
                  int  a [] = { 1, 2, 3, 4, 5, 6 };
                perm(a, 0, 3);
                cout<< total << endl;
                  return  0;
}
 
此外在C++STL中也有一个关于全排列的函数:
     next_permuntation(start, start_length);
      int  a [] = { 1, 2, 3, 4, 5, 6 };
                sort(a, a + 6);
                  while  (next_permutation(a, a + 6)){
                                  for  ( int  i = 0; i < 6; i++){
                                                cout << a[i] <<  " "  ;
                                }
                                cout << endl;
                }

转载于:https://www.cnblogs.com/hbhzsysutengfei/p/3414568.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值