求排列

来源:互联网 发布:明山控股集团知乎 编辑:程序博客网 时间:2024/05/16 17:17
//C++ STL中提供了库函数next_permutation//求排列#include <iostream>#include <cstdio>#include <algorithm>using namespace std;int main(){    //cout << "Hello world!" << endl;    freopen("input.txt","r",stdin);    int n,p[10];    scanf("%d",&n);    for(int i=0;i<n;i++)        scanf("%d",&p[i]);    sort(p,p+n);//排序,得到p的最小排列    do    {        for(int i=0;i<n;i++)            cout<<p[i]<<" ";//输出排列p        cout<<endl;    }while(next_permutation(p,p+n));//求下一个排列    fclose(stdin);    return 0;}
//求排列//#include <iostream>#include <fstream>using namespace std;void print_permutation(int n,int* A,int cur){    int i,j;    if(cur==n)//递归边界    {        for(i=0;i<n;i++)            cout<<A[i]<<" ";        cout<<endl;    }    else    {        //尝试在A[cur]中填各种整数i        for(i=1;i<=n;i++)        {            int ok=1;            for(j=0;j<cur;j++)                if(A[j]==i)ok=0;//如果i已经在A[0]~A[cur-1]出现过,则不能再选            if(ok)            {                A[cur]=i;                print_permutation(n,A,cur+1);//递归调用            }        }    }}int main(){    //cout << "Hello world!" << endl;    freopen("input.txt","r",stdin);    int Arr[10];    int n;    cin>>n;    for(int i=0;i<n;i++)        cin>>Arr[i];    print_permutation(n,Arr,0);    fclose(stdin);    return 0;}


0 0
原创粉丝点击