题目描述
把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。
输入格式
一个整数n。
输出格式
按照从小到大的顺序输出所有方案,每行1个。
首先,同一行相邻两个数用一个空格隔开。
其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。
数据范围
1≤n≤9
输入样例
3
输出样例
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
import java.io.*;
import java.util.*;
public class Main {
static Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
static int[] p = new int[10];
static int n;
public static void f(int u, int state) throws IOException{
if(u == n){
for(int i = 0; i < n; i++){
out.write(p[i]+" ");
}
out.write("\n");
return;
}
for(int i = 0; i < n; i++){
if((state>>i & 1) == 0){
p[u] = i+1;
f(u+1, state | (1<<i));
}
}
}
public static void main(String[] args) throws IOException{
n = in.nextInt();
f(0,0);
out.flush();
}
}