AcWing 94. 递归实现排列型枚举
原题链接
简单
作者:
L_51
,
2021-03-09 20:34:18
,
所有人可见
,
阅读 204
import java.util.Scanner;
public class Main {
static int N = 10;
static int n;
static int[] st = new int[N]; // 存储状态
static int[] a = new int[N]; // 存储结果
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
dfs(1);
}
public static void dfs(int u) { // u代表的是每一个位置
if (u > n) {
for (int i = 1; i <= n; i ++) {
System.out.print(a[i] + " ");
}
System.out.println();
return;
}
for (int i = 1; i <= n; i ++) { // 遍历的是数字,不是每个位置
if (st[i] == 0) { // 如果这个数字没有被放过,那么将这个数字放在这一层
a[u] = i;
st[i] = 1; // 将这个数字的状态设置未1,不会被放入后面的位置
dfs(u + 1);// 进入下一个位置
st[i] = 0; // 恢复这个数字的状态
} else {
continue; // 如果这个数字被使用过,使用后面的数字
}
}
}
}