小白书之求排列

来源:互联网 发布:淘宝客服参考用语 编辑:程序博客网 时间:2024/06/05 19:19

生成1—n的排列:

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<string>#include<cctype>#include<cmath>#include<map>#include<set>#include<vector>#include<queue>#include<stack>#include<ctime>#include<algorithm>#include<climits>#define LL long longusing namespace std;const int N=101;void print_permutation(int n,int *A,int cur){    if(cur==n)    {        for(int i=0;i<n;i++)            cout<<A[i]<<' ';        cout<<endl;    }    else    {        for(int i=1;i<=n;i++)        {            int ok=1;            for(int j=0;j<cur;j++)            {                if(A[j]==i)                {                    ok=0;                    break;                }            }            if(ok)            {                A[cur]=i;                print_permutation(n,A,cur+1);            }        }    }}int main(){    int n;    while(cin>>n)    {        int A[N];        print_permutation(n,A,0);    }    return 0;}
生成可重集的排列:

<pre name="code" class="cpp">#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<string>#include<cctype>#include<cmath>#include<map>#include<set>#include<vector>#include<queue>#include<stack>#include<ctime>#include<algorithm>#include<climits>#define LL long longusing namespace std;const int N=101;int P[N];void print_permutation(int n,int *A,int cur){    if(cur==n)    {        for(int i=0;i<n;i++)            cout<<A[i]<<' ';        cout<<endl;    }    else    {        for(int i=0;i<n;i++)        {           if(!i||P[i]!=P[i-1])           {               int c1=0,c2=0;               for(int j=0;j<n;j++)                if(P[j]==P[i]) c1++;               for(int j=0;j<cur;j++)                if(A[j]==P[i]) c2++;               if(c2<c1)               {                   A[cur]=P[i];                   print_permutation(n,A,cur+1);               }           }        }    }}int main(){    int n;    while(cin>>n)    {        int A[N];        for(int i=0;i<n;i++)            cin>>P[i];        sort(P,P+n);        print_permutation(n,A,0);    }    return 0;}


C++函数库调用生成排列:

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<string>#include<cctype>#include<cmath>#include<map>#include<set>#include<vector>#include<queue>#include<stack>#include<ctime>#include<algorithm>#include<climits>#define LL long longusing namespace std;const int N=101;int P[N];int main(){    int n;    while(cin>>n)    {        for(int i=0;i<n;i++)            cin>>P[i];         sort(P,P+n);        do        {            for(int i=0;i<n;i++)                cout<<P[i]<<' ';            cout<<endl;        }while(next_permutation(P,P+n));    }    return 0;}




0 0
原创粉丝点击