2018寒假集训-紫皮书-全排列

*提前标注:c++产生全排列的两种方法:

1)递归枚举;

2)STL next_permutation(p,p+n);

人人都愿省事,STL对于懒人来说是一个最好的选择,下面就是STL next_permutation()的适用方法。

#include
#include
#include
#include

using namespace std;

int p[10];

const int n=3;

int main(){
    for(int i=0;i>p[i];
    clock_t start,finish;
    start=clock();

    sort(p,p+n);
    do{
        for(int i=0;i




枚举排列

1. 1-n全排列(递归)

#include
#include
#include

using namespace std;

int a[10];

void print_permutation(int n,int *a,int cur){
    if(cur==n){
            for(int i=0;i

2. 给定数列的全排列(递归)

<错误方法>

#include
#include
#include

using namespace std;

int a[10];
int p[10];

void print_permutation(int n,int *p,int *a,int cur){  //此方法为错误方法
    if(cur==n){
        for(int i=0;i>p[i];
    clock_t start,finish;
    start=clock();
    print_permutation(3,p,a,0);
    finish=clock();
    printf("time:%.7f\s\n",((float)finish-(float)start)/1000);
    return 0;
}
<正确方法>
#include
#include
#include

using namespace std;

int a[10];
int p[10];

void print_permutation(int n,int *p,int *a,int cur){
    if(cur==n){
        for(int i=0;i>p[i];
    clock_t start,finish;
    start=clock();
    print_permutation(3,p,a,0);
    finish=clock();
    printf("time:%.7f\s\n",((float)finish-(float)start)/1000);
    return 0;
}


你可能感兴趣的:(2018寒假集训)