洛谷链接:https://www.luogu.com.cn/problem/P1706
import java.util.Scanner;
public class Main {
static int n=0;
static int[] used=new int[100];
static int[] pd=new int[100]; //pd是判断是否用过这个数
//输出函数
public static void print() {
for(int i=1;i<=n;i++) {
System.out.print(" "+used[i]); //保留五位常宽
}
System.out.println();
}
//深搜函数,当前是第k格
public static void dfs(int k) {
if(k==n) {
print();
return;
}
for(int i=1;i<=n;i++) { //1-n循环填数
if(pd[i]!=1) { //如果当前数没有用过
pd[i]=1; //标记一下
used[k+1]=i; //把这个数填入数组
dfs(k+1); //填下一个
pd[i]=0; //回溯
}
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
dfs(0); //从第0格开始
}
}