求全排列的两种方法

Posted bxynlbyx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求全排列的两种方法相关的知识,希望对你有一定的参考价值。

打印n个数的全排列

(1)使用stl里的next_permutation()

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int data[4]={5,2,1,4};
    sort(data,data+4);
    do{
        for(int i=0;i<4;++i)
            cout<<data[i]<<" ";
        cout<<endl;
    }while(next_permutation(data,data+4));
    return 0; 
} 

(2)递归求全排列

#include<iostream>
using namespace std;
#define Swap(a,b){int temp=a;a=b;b=temp;}
int data[]={1,2,3,4};
int num=0;
int Perm(int begin,int end){
    int i;
    if(begin==end){   //递归结束产生一个全排列
        num++;
    }else
        for(int i=begin;i<=end;i++){
            Swap(data[begin],data[i]);//把当前第一个数和后面的所有数交换位置
            Perm(begin+1,end);        //去掉第一个数,第二个数与后面的所有数交换位置 以此类推
            Swap(data[begin],data[i]);  //恢复,用于下一次交换
        }
}
int main(){
    Perm(1,4);
    cout<<num<<endl;//打印排列总数
}

 

以上是关于求全排列的两种方法的主要内容,如果未能解决你的问题,请参考以下文章

c++dfs求全排列,求详细解释

枚举有重复元素的排列的两种方法

专题训练 1001 求全排列

求全排列的数学方法(洛谷1088 火星人noip2004普及组第4题)

求全排列

枚举排列的两种常见方法