链接:https://www.luogu.com.cn/problem/P1706
代码块:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
Solution s = new Solution(n);
s.dfs(0); //从0开始
}
}
class Solution {
int n;
boolean[] visit; //visit[i-1] 表示 是否考虑过"i"
int[] res; //存放结果
//构造器
public Solution(int n) {
this.n = n;
visit = new boolean[n];
res = new int[n];
}
//打印
public void prt() {
for (int i : res) {
System.out.printf("%5d", i); //5个场宽
}
System.out.println(); //换行,下一个排列结果
}
public void dfs(int k) {
//当k == n 时,说明已经有了一个答案
if (k == n) {
prt();
} else {
for (int i = 1; i <= n; i++) {
if (!visit[i-1]) {
visit[i-1] = true;
res[k] = i;
dfs(k+1); //递归
visit[i-1] = false; //回溯
}
}
}
}
}