题目描述
从键盘读入n个整数(每个数都是1~9之间的数),输出这n个整数的全排列(数字不能重复)。
输入
第1行输入一个整数n(1<=n<=8)
第2行输入n个不相等的整数(1<=每个数<=9)。
输出
输出若干行,每行包括n个数据,表示一种排列方案,所有的排列按字典码从小到大排序输出。
样例输入
3
2 4 6
样例输出
2 4 6 2 6 4 4 2 6 4 6 2 6 2 4 6 4 2
参考代码:
#include
using namespace std;
int n,a[10],b[10];
bool st[10];
void dfs(int k){
if(k==n+1){
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
return;
}
for(int i=1;i<=n;i++){
if(st[i]==0){
st[i]=1;
a[k]=b[i];
dfs(k+1);
st[i]=0;
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",b+i);
sort(b+1,b+n+1);
dfs(1);
return 0;
}