全排列

对输入的n个数做全排列

样例输入

3

1 2 3

输出

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

/*

1...n全排列,不计算是否有重复

*/

#include<cstdio>

#include<string.h>

using namespace std;

const int maxn = 100;



int rcd[maxn],num[maxn],vis[maxn];

int n;



int input(){

    if(scanf("%d",&n)==EOF)

        return 0;

    memset(vis,0,sizeof(vis));

    for(int i=0;i<n;i++)

        scanf("%d",&num[i]);

    return 1;

}





void full_permutation(int l){

    int i;

    if(l==n){

        for(int i=0;i<n;i++){

            printf("%d",rcd[i]);

            if(i<n-1)

                printf(" ");

        }

        printf("\n"); return ;

    }

    for(int i=0;i<n;i++){

        if(!vis[i]){

            rcd[l]=num[i];

            vis[i]=1;

            full_permutation(l+1);

            vis[i]=0;

        }



    }

}



int main(){

   while(input())

    full_permutation(0);

    return 0;

}

  

你可能感兴趣的:(全排列)