【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(CodeVS上过不了。。。我也不知道为啥)

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
char str[20]={' '};
int main()
{
    scanf("%d",&n);
    for (int i=0;i<n;i++) str[i]=i+'0'+1;
    int len = strlen(str);
    for (int i=0;i<=len;i++) printf("%c ",str[i]);
    printf("\n");
    while (next_permutation(str,str+len))
    {
        for (int i=0;i<=len;i++) printf("%c ",str[i]);
        printf("\n");
    }
    return 0;
}

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