递归实现指数型枚举
import java.util.*;
public class Main {
public static void dfs(int u, int n, boolean[] st) {
if (u > n) {
for (int i = 1; i <= n; i++) {
if (st[i]) {
System.out.print(i + " ");
}
}
System.out.println();
return;
}
st[u] = false;
dfs(u + 1, n, st);
st[u] = true;
dfs(u + 1, n, st);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
boolean[] st = new boolean[n + 1];
dfs(1, n, st);
}
}
递归实现组合型枚举
import java.util.*;
public class Main {
public static void dfs(int u, int st, int n, int m, int[] path) {
if (u > m) {
for (int i = 1; i <= m; i++) {
System.out.print(path[i] + " ");
}
System.out.println();
return;
}
for (int i = st; i <= n; i++) {
path[u] = i;
dfs(u + 1, i + 1, n, m, path);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int[] path = new int[n + 1];
dfs(1, 1, n, m, path);
}
}
递归实现排列型枚举
import java.util.*;
public class Main {
public static void dfs(int u, int n, int[] path, boolean[] st) {
if (u > n) {
for (int i = 1; i <= n; i++) System.out.print(path[i] + " ");
System.out.println();
}
for (int i = 1; i <= n; i++) {
if (!st[i]) {
path[u] = i;
st[i] = true;
dfs(u + 1, n, path, st);
st[i] = false;
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] path = new int[n + 1];
boolean[] st = new boolean[n + 1];
dfs(1, n, path, st);
}
}