生成1~n的全排列

来源:互联网 发布:联合国刚果行动知乎 编辑:程序博客网 时间:2024/05/17 08:37

记录下写的代码和题目方便自己不会忘记(递归部分确实不是很好懂)

#include<iostream>#include<string.h>using namespace std;void print(int n,int *p,int cur){       if(n==cur){        for(int i=0;i<cur;i++)            cout<<p[i]<<" ";        cout<<endl;    }    else for(int i=1;i<=n;i++){//在p[cur]里尝试各种数字i        int flag=1;        for(int j=0;j<cur;j++){            if(p[j]==i)                flag=0;//若在p[j]出现过则将flag置零        }        if(flag){            p[cur]=i;            print(n,p,cur+1);        }    }}int main(){    int n,cur=0;    cin>>n;    int p[1000];    memset(p,0,sizeof(p));    print(n,p,cur);    return 0;}

在此再附上stl里的一个全排列函数next_permutation(),很方便的函数

#include<iostream>#include<algorithm>using namespace std;int main(void){    int n,p[100],cur=0;    cin>>n;    for(int i=0;i<n;++i)        p[i]=i+1;    do{        for(int i=0;i<n;i++)            cout<<p[i]<<" ";        cout<<endl;    }    while(next_permutation(p,p+n));    return 0;}
0 0