【CodeVS1294】全排列

Description

给出一个n, 请输出n的所有全排列

Input

读入仅一个整数n   (1<=n<=10)

Output

一共n!行,每行n个用空格隔开的数,表示n的一个全排列。并且按全排列的字典序输出。

Sample Input

3

Sample Output

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

题解

搜索

#include<cstdio>
using namespace std;
int a[11];
bool vis[11];
int n;
void print()
{
    for (int i=1;i<=n;i++) printf("%d ",a[i]);
    printf("\n");
}
void dfs(int x,int cnt)
{
    vis[x] = true;
    a[cnt] = x;
    if (cnt == n) print();
    for (int i=1;i<=n;i++)
        if (!vis[i])
            dfs(i,cnt+1);
    vis[x] = false;
}
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++) dfs(i,1);
}

STL

#include<cstdio>
#include<algorithm>
using namespace std;
int a[20];
int n;
int main(){
    scanf("%d",&n);
    for (int i=1;i<=n;i++) a[i]=i,printf("%d ",i);printf("\n");
    while(next_permutation(a+1,a+n+1)){
        for (int i=1;i<=n;i++) printf("%d ",a[i]);
        printf("\n");
    }
}

 

posted @ 2016-02-20 20:40  mengyue  阅读(193)  评论(0编辑  收藏  举报