【问题描述】
输入自热数n,输出前n个自然数的所有全排列。n<=10.
【输入】
自然数n。
【输出】
所有的全排列,每行一种排列。
【输入输出样例】
pailie.in
|
pailie.out
|
3
|
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
6
|
分析
int a[12]; //记录生成的排列
int b[12]; //标记是否可用
int n; // 前n个自热数的全排列
int ans; //记录生成的排列数量
蒟蒻奉上代码
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,b[10001]; bool a[233333]; void dfs(int now) { for(int i=1;i<=n;i++) { if(!a[i]) { if(now==n) { b[now]=i; for(int j=1;j<=n;j++) printf("%5d",b[j]); printf("\n"); } else { a[i]=true; b[now]=i; dfs(now+1); a[i]=false; } } } } int main() { scanf("%d",&n); dfs(1); }