zcmu-1683: 排列

来源:互联网 发布:哪里有淘宝店铺出租 编辑:程序博客网 时间:2024/06/01 19:36

                                           1683 排列

Description

给你一个数,输出所有的排列
Input
一个数n
Output
看样例
Sample Input
2
Sample Output
1 2

2 1

经典的全排列问题

递归方法

#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>using namespace std;int play(int n,int* A,int len){    if(len==n){//递归边界        printf("%d",A[0]);        for(int i=1;i<n;i++)printf(" %d",A[i]);        printf("\n");    }    else{        for(int i=1;i<=n;i++){//填充A[len];            int flag=1;            for(int j=0;j<len;j++){                if(A[j]==i)flag=0;//如果出现过就不在选了            }            if(flag){                A[len]=i;                play(n,A,len+1);            }        }    }}int main(){    int s[500000];    int n,m,x,y,t=1,k,sum;    while(~scanf("%d",&n))    {        memset(s,0,sizeof(s));        play(n,s,0);    }    return 0;}
运用函数next_permutation()
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>using namespace std;int main(){    int s[500000];    int n,m,x,y,t=1,k,sum;    while(~scanf("%d",&n))    {        memset(s,0,sizeof(s));        for(int i=0;i<n;i++)s[i]=i+1;        do{            printf("%d",s[0]);            for(int i=1;i<n;i++)printf(" %d",s[i]);            printf("\n");        }while(next_permutation(s,s+n));    }    return 0;}

原创粉丝点击